
学习单片机的指令系统.ppt
63页第2章 单片机的指令系统§2.1 指令系统概述n单片机所能执行的指令的集合称为指令系统 n以助记符、符号地址、标号等书写程序的语 言称为汇编语言 2.1.1 指令分类n (1) 按功能分n(2) 按字长分n(3) 按执行时间分2.1.2 指令格式[标号]:操作码 [目的操作数],[源操作数];[注释 ] 2.1.3 指令字长和指令周期 指令周期是指执行一条指令所需要的时间 2.1.4 符号约定n⑴ #data:8位立即数,取值在00H~ 0FFH之间n⑵ #data16:16位立即数,取值在0000H ~0FFFFH之间n⑶ Rn:工作寄存器,n=0~7,即工作寄 存器组中的一个工作寄存器n⑷ Ri:用于寄存器间接寻址的工作寄存器 ,i=0或1,即工作寄存器R0和R1n⑸ direct:8位直接地址,片内RAM地址 00H~0FFHn⑹ addr11:11位目的地址n⑺ addr16:16位目的地址n⑻ bit:位地址n⑼ DPTR:双数据指针寄存器n⑽ Pi:MCS-51单片机的I/O口,i=0~3n⑾ @:寄存器间接寻址前缀n⑿ rel:8位带符号地址偏移量n⒀ $:当前指令的地址。
n⒁ (X):片内RAM单元X中的内容n⒂ ((X)):X中的内容所指向单元的内容n⒃ ←:左边的内容被右边的内容所取代§2.2 寻址方式2.2.1 直接寻址n直接寻址:指令中直接给出操作数存储 地址的寻址方式n1. 寻址范围 (1)片内RAM的低128单元 (2)特殊功能寄存器 SFR n2. 使用注意事项 寻址特殊功能寄存器 SFR 时,可以用直 接地址,也可以用寄存器名 INC A ;A内容加1,寄存器寻址方式 INC ACC ;直接寻址方式 INC 0E0H ;直接寻址方式2.2.2 立即寻址n立即寻址:在指令中直接给出操作数的寻址方 式 例如:将十进制数200传送到累加器A中 MOV A,#0C8H MOV A,#200 MOV A,#11001000B2.2.3 寄存器寻址 寄存器寻址:操作数存放于寄存器中的 寻址方式 可用于寄存器寻址的寄存器有: (1)四个工作寄存器组中的工作寄存 器 R0~R7,共32个工作寄存器 (2)特殊功能寄存器,如 A、B、DPTR 、Pi等 2.2.4 寄存器间接寻址 寄存器间接寻址:操作数的地址存放在 寄存器中的寻址方式 1. 寻址范围 (1)片内RAM 256B地址单元 。
(2)对片外RAM 64KB地址单元 例如:将片内RAM 55H单元的数据50H 传送到累加器A中指令如下: MOV R0,#55H MOV A,@ R0 ;执行结果(A)=50H例如:将片外RAM 0500H单元的数据50H 传送到累加器A中指令如下: MOV DPTR,#0500H MOVX A,@DPTR2. 使用注意事项 (1)为区别寄存器寻址方式,作为寄存 器间接寻址的寄存器前面加@ (2)寄存器间接寻址方式不能用于对特 殊功能寄存器SFR的寻址 例如:MOV R0,#0F0H;MOV A, @R0 (3)堆栈操作指令也是间接寻址方式,它 以堆栈指针SP 作为间接寻址寄存器2.2.5 变址寻址 变址寻址:以DPTR或PC中的数据为基本 地址,以A中的数据为地址偏移量,基地 址与地址偏移量之和作为被寻址数据地址 的寻址方式 查表操作指令为: MOVC A,@A+PC MOVC A,@A+DPTR例如:将程序存储器050AH单元中的常数 50H送到累加器A中指令如下: MOV A,#0AH MOV DPTR,#0500H MOVC A,@ A +DPTR几点说明: (1)变址寻址方式只能对程序存储器进 行寻址,因此只能用于读取数据,而不能 用于存放数据,它主要用于查表操作。
(2)变址寻址指令只有3条: MOVC A, @ A +PC MOVC A, @ A +DPTR JMP @ A +DPTR2.2.6 相对寻址 相对寻址:在执行程序的过程中,CPU 寻找相对于当前程序计数器PC值的下一 条指令地址的寻址方式例如:当程序状态字寄存器PSW的最高位时, 程序转移到标号为LOOP的语句执行 ORG 0000H SJMP MAIN ORG 0030H MAIN:SETB CJC LOOP………… LOOP:MOV A,#30H……………2.2.7 位寻址 位寻址:针对可位地址的片内RAM空间和可 位寻址的特殊功能寄存器进行寻址的方式 (1)内部 RAM 的位寻址区,共16个单元的128 位,单元地址为20H~7FH,位地址的表示方法 可以用直接位地址或单元地址加位的表示方法 例如:将2FH单元的最高位的值传送到PSW.7 指令如下: MOV C,7FH MOV C,2FH.7(2)特殊功能寄存器SFR中可位寻址的寄存器共 11个,其位地址在指令中有4 种表达方式 例如:对程序状态字PSW寄存器辅助进位位AC 进行操作 ① 直接使用位地址:MOV C,0D6H ② 位名称表示法:MOV C, AC ③ 单元地址加位的表示法:MOV C,0D0H.6 ④ 专用寄存器符号加位的表示法: MOV C, PSW .6§2.3 数据传送类指令2.3.1 内部数据传送指令 MOV , ;注释 (1)立即寻址数据传送指令 指令功能:把源操作数送指定单元或寄存 器,源操作数为立即数。
MOV A, #data MOV Rn, #data MOV @ Ri, #data MOV direct, #data(2)片内RAM单元与累加器A间传送数据指 令MOV A,RnMOV Rn,AMOV A, @Ri MOV @Ri, AMOV A,direct MOV direct,A(3)片内RAM单元间的数据传送指令 MOV direct, Rn MOV Rn, direct MOV direct, @ Ri MOV @Ri, direct MOV direct2, direct1例2-1:将P1口读得的数据传送给P2口 指令如下: 直接寻址: MOV 0A0H,90H 通过累加器A: MOV A,P1 MOV P2,A 直接传送: MOV P2,P1例如:将R0中的数传给R7指令如下: MOV A,R0 MOV R7,A (4)十六位数据传送指令 MOV DPTR,#data16 例2-2:将数据1000H传送到数据指针DPTR 中指令如下: MOV DPTR,#1000H例2-3:设内部 RAM 中(30H)=40H, (40H)=10H,P1口作输入口,(P1) =0CAH,程序如下: MOV R0, #30H MOV A, @R0 MOV R1, A MOV B, @R1 MOV @R1,P1 MOV P2, P1 执行后的结果是什么? 2.3.2 堆栈操作指令 PUSH direct ;SP←(SP)+1,(SP)←(direct) POP direct ;direct←((SP)),SP←(SP)-1 例2-4:设(30H)=X,(40H)=Y,试用堆栈实现 30H 和 40H 单元中的数据交换。
MOV SP, #50H PUSH 40H PUSH 30H …………… POP 40H POP 30H2.3.3 数据交换指令(1)整字节交换指令 XCH A, Rn ;(A)←→(Rn) XCH A, @Ri ;(A)←→((Ri)) XCH A, direct ;(A)←→(direct) (2)低半字节交换指令 XCHD A, @Ri ;(ACC.3~ACC.0)←→((Ri.3)~(Ri.0)) (3)累加器高、低半字节交换指令 SWAP A ;(ACC.7~ACC.4)←→(ACC.3~ACC.0) 例2-6 已知片内50H单元中有一个十进 制数0~9,试编程把它变为相应的ASCII 码并存入50H单元 2.3.4 外部数据传送指令存储器 (1)用数据指针DPTR作地址寄存器的寄存器 间接寻址指令 MOVX A, @ DPTR ;A←((DPTR)) MOVX @DPTR, A ;(DPTR)←(A) (2)用Ri作地址寄存器的寄存器间接寻址指 令 MOVX A, @Ri ;A←((Ri)) MOVX @Ri, A ;(Ri)←(A) 例2-6:若外部RAM中,(20FFH)=30H, (2100H)=15H。
执行下列指令后A中的 内容是多少? MOV DPTR, #20FFH MOV A,@DPTR INC DPTR MOV A,@DPTR例2-7:把片外RAM的70H单元中的一个数 X,送到片外RAM的1010H单元 2.3.5 查表操作指令 MOVC A,@A +DPTR ; A←((A) +(DPTR)) MOVC A, @ A +PC ; A←((A)+(PC))例2-8:已知累加器A中有一个0~9范围内 的数,用以上查表指令编出能查出该数平 方值的程序设平方表表头地址为TABLE (1)采用DPTR作为基址寄存器 MOV DPTR, #TABEL MOVC A, @A +DPTR TABLE:DB 0, 1, 4, 9,16 DB 25,36,49,64,81 (2)采用PC作为基址寄存器 ORG 1FFBH 1FFBH ADD A,#data ;修正量 1FFDH MOVC A,@A +PC ;查表 1FFEH SJMP $ 2000H DB 0 2001H DB 1 2002H DB 4 … 2009H DB 81§2.4 算术运算和逻辑指令2.4.1 算术运算指令1. 加法指令 (1)不带进位的加法指令 ADD A, Rn ADD A, direct ADD A, @Ri ADD A, #data 例2-9:试分析8051执行如下指令后, 累加器 A 和 PSW 各标志位的变化状况。
MOV A, #0CFH ADD A, #0A5H(2)带进位加法指令 带进位加法运算指令常用于多字节加法运算 ADDC A, Rn ;A←(A)+(Rn)+ Cy ADDC A, direct ; A←(A)+(direct)+ Cy ADDC A, @Ri ; A←(A)+((Ri))+ Cy ADDC A, #data ;A←(A)+data+Cy 例2-10:设(A)=0AAH,(R0)=55H, Cy=1 执行如下指令后,PSW的值是多少? ADDC A,R02. 带借位减法指令 SUBB A, Rn ;A←(A)+(Rn)- Cy SUBB A, direct ;A←(A)-(direct)-Cy SUBB A, @Ri ;A←(A)-((Ri))-Cy SUBB A, #data ;A←(A)-data-Cy 3. 加1和减1指令 (1)加1指令 INC A ; A←(A)+1 INC Rn ;Rn←(Rn)+1 INC direct ;direct←(direct)+1 INC @Ri ;(Ri)←((Ri))+1 INC DPTR ;DPTR←(DPTR)+1(2)减1指令 减1指令与加1指令使用方法相同。
DEC A ; A←(A)-1 DEC Rn ;Rn←(Rn)-1 DEC @Ri ;(Ri)←((Ri))-1 DEC direct ;direct←(direct)-14. 乘法指令MUL AB (1)进位标志位Cy总是清“0” (2)累加器A中的值影响奇偶标志位P (3)当积大于255(B中的内容不为0)时 ,OV=1,否则OV =0 5. 除法指令 DIV AB (1)对Cy和P标志的影响与乘法时相同 (2)当除数为0时,除法没有意义,OV =1 ,否则OV =0 6. 二~十进制调整指令 DA A 若AC =1或A3~A09,则 A←(A)+06H ; 若Cy =1或A7~A49,则 A←(A)+60H 2.4.2。
