1 / 37

第三章 MCS-51 指令系统

第三章 MCS-51 指令系统. 3.1 指令系统概述 3.2 寻址方式 3.3 指令系统. 第三章节 MCS-51 指令系统. MCS-51 系列单片机指令基本情况. 51 系列单片机 指令集含有 111 条 指令 每条指令在程序存储器 ROM 中占据一定 空间 ,以字节为单位 按指令 所占字节数 分类: 单字节 (49 条 ); 双字节 (46 条 );3 字节 (16 条 ) 每条指令在执行时要花去一定的 时间 ,以机器周期为单位 按指令 执行时间 分类: 单周期 (64 条 ); 双周期 (45 条 );4 周期 (2 条 )

preston
Download Presentation

第三章 MCS-51 指令系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章MCS-51指令系统 3.1 指令系统概述 3.2 寻址方式 3.3 指令系统

  2. 第三章节MCS-51指令系统 MCS-51系列单片机指令基本情况 • 51系列单片机指令集含有111条指令 • 每条指令在程序存储器ROM中占据一定空间,以字节为单位 • 按指令所占字节数分类: • 单字节(49条);双字节(46条);3字节(16条) • 每条指令在执行时要花去一定的时间,以机器周期为单位 • 按指令执行时间分类: • 单周期(64条);双周期(45条);4周期(2条) • 按指令的功能分类,可分为5大类:数据传送类(29条);算术运算类(24条) 逻辑运算及移位类(24);控制转移类(17条) 位操作类(17条)

  3. ASM-51指令格式 51系列单片机采用ASM-51指令格式,格式如下: [标号:]操作码[目的操作数][,源操作数][;注释] 其中包含: 方括符[ ]表示可选项 标号代表指令所在地址,1-8个字母/数字,“:”结尾 操作码就是指令功能助记符,指令实体 目的操作数 源操作数 注释,以“;”开头

  4. 第一节 MCS-51系列单片机寻址方式 寻址方式:计算机指令中操作数(按地址)获取的方式 MCS-51系列单片机提供了7种寻址方式,如果一条指令中包含多个操作数,就可能用到一种以上的寻址方式 1、立即寻址 2、直接寻址 3、寄存器寻址 4、寄存器间接寻址 5、变址寻址 6、相对寻址 7、位寻址

  5. 1、立即寻址(一) 在指令中直接给出操作数的寻址方式称为立即寻址。这个操作数叫立即数,如指令: MOV A, #3AH 该指令是将立即数3AH送累加器,由于MCS-51单片机的片内存储器是8位存储器,因此立即数一般为8位二进制数。在MCS-51的指令系统中,用#来识别立即数。 程序存储器 PC 74H 操作码 PC+1 3AH 立即数 A 3AH

  6. 01H 01H 23H 23H 1、立即寻址(二) 在有的指令中,也会用到16位立即数,如: MOV DPTR, #0123H 该指令是将16位立即数0123H送数据指针DPTR(用于对16位地址的存储器寻址),DPTR由两个特殊功能寄存器DPH和DPL组成,在后面的寻址方式中会使用到DPTR。 SFR 程序存储器 PC 90H 操作码 PC+1 DPH 高位立即数 PC+2 DPL 低位立即数

  7. 2、直接寻址 在指令中直接给出操作数地址的寻址方式称为直接寻址,直接寻址何以寻址特殊功能寄存器、内部RAM(128字节)和位地址,如: MOV A, 70H; A←(70H) 该指令是将RAM单元70H(地址)的内容送累加器。 内部RAM 程序存储器 70H XX PC 74H 操作码 70H PC+1 直接地址 A XX

  8. 3、寄存器寻址 在指令的操作码中包含了某一工作寄存器的地址(Rn:R0—R7),而操作数则存放在该寄存器中,如: MOV A, R5; A←(R5) 该指令是将R5的内容送累加器。 内部RAM 程序存储器 R7 PC 1101 101 操作码 R6 R5 XX A XX

  9. 4、寄存器间接寻址 在指令的操作码中包含了某一工作寄存器的地址(可用作地址指针的工作寄存器是@Ri:R0、R1),而操作数地址则存放在该寄存器中,如: MOV A, @R1; A←((R1)) 该指令是将R1的内容送作为地址,将该地址所对应的RAM单元的内容送累加器。 内部RAM 程序存储器 XX 68H PC 111001 1 操作码 A XX R1 68H

  10. DPH DPL ALU 5、变址寻址 将PC或DPTR的值作为基地址,将Acc的值作为变址地址,二者向加得到的值作为操作数的地址,如: MOV A, @A+DPTR; A←((A)+(DPTR)) 这种寻址方式一般用于常数表,DPTR的内容为表头地址,Acc的内容就是数据在表中的位置。 SFR 程序存储器 1EH XX A PC 10010011 操作码 02H 02F1H F1H 030FH XX 02F1H +1EH=030FH

  11. 6、相对寻址(一) 相对寻址以PC当前值(PC当前值是执行完指令后的值,也就是当前指令的PC值+指令所占的字节数)作为基地址,与指令中给定的偏移量rel相加,所得的结果作为程序的转移地址,指令中的偏移量rel是一个用补码表示的8位带符号数。相对寻址用于相对转移指令中,如: JZ 30H; 当A=0时,PC←PC+2+rel 当A≠0时,PC←PC+2 //程序顺序执行 该指令以累加器Acc的值是否为0为转移条件,如果为Acc的值0则转移,如果Acc的值不为0则程序顺序执行。程序的执行过程见相对寻址(二)。 在MCS-51的指令系统中,相对转移指令多为2字节指令,因此目的地址一般是PC+2+rel;如果是3字节指令,目的地址是PC+3+rel。偏移量rel是一个8位带符号数,因此程序转移的范围在PC当前值的+127—-128之间。

  12. PC 0123H ALU 6、相对寻址(二) 程序存储器 PC 0100H 60H 操作码 PC rel=30H PC+1 0101H 偏移量 30H 0102H 0132H PC+2 0102H XX 0102H +30H= 0132H

  13. 7、位寻址 MCS-51系列单片机中有专用的位运算指令,可以对位寻址区的每一个位进行数据传送、逻辑运算等操作,如: MOV C, 07H; C←(07H) 该指令属于位操作指令,作用是将位地址为70H的位单元(字节地址20H单元的D7位)传送到位累加器C中。 程序存储器 PC A2H 操作码 PC+1 07H 07 00 X 20H SFR PSW X C

  14. MCS-51指令集(包含5大类功能) 1、数据传送类指令: (29条) 2、算术运算类指令: (24条) 3、逻辑运算及移位类指令: (24条) 4、控制转移类指令: (17条) 5、位操作指令: (17条)

  15. 1、数据传送类指令(一) 片内数据存储器间传送: (MOV—16条) 片外数据存储器送累加器: (MOVX—4条) 程序存储器送累加器: (MOVC—2条) 数据交换: (XCH,XCHD,SWAP—5条) 数据交换: (PUSH,POP—2条)

  16. 1、数据传送类指令(二) 片内数据存储器间传送: (MOV—16条) MOV类指令带有两个操作数,前一个是目的地址,后一个是源操作数。作用是将源操作数送目的地址,如:MOV A, 30H; A←(70H) Acc Direct直接寻址 @Ri间接寻址 Rn寄存器寻址 #data立即数

  17. 1、数据传送类指令(三) 片外数据存储器数据送累加器:(MOVX—4条) MOVX类指令可以在累加器和@Ri或@DPTR(@Ri为8位地址;@DPTR为16位地址)所指向的外部数据存储器间相互传送数据, 具体指令有: MOVX A, @Ri; A←((Ri)) MOVX A, @DPTR; A←((DPTR)) MOVX @Ri, A; ((Ri)) ← A MOVX @DPTR, A; ((DPTR)) ←A

  18. 1、数据传送类指令(四) 程序存储器数据送累加器:(MOVC—2条) MOVX类指令采用变址寻址方式进行寻址。该类指令通常称为查表指令,送入累加器Acc的数据是事先写入的表格数据,通常使用伪指令DB或DW预先定义在程序存储器中, 具体指令有: MOVC A, A+@DPTR; MOVX A, A+@PC;

  19. 1、数据传送类指令(五) 数据交换指令:(5条) XCH A,direct (字节互换) XCH A,@Ri (字节互换) XCH A,Rn (字节互换) XCHD A,@Ri 累加器Acc的低4位与((Ri))的低4位互换,各自的高4位不变 SWAP A 累加器Acc的高低4位互换

  20. 1、数据传送类指令(六) 堆栈操作指令:(2条) • PUSH 压栈指令 • POP 弹栈指令 • 堆栈由特殊功能寄存器SP(堆栈指针)进行管理 • 理论上堆栈在存储器中可以放在任意位置,但为了不和工作寄存器冲突,一般将堆栈放在存储器靠后的位置 • 堆栈指针SP总是指向栈顶(自动变化,见第二章相关内容) • PUSH和POP一般是成对使用的

  21. 2、算术运算类指令(一) 算术运算类指令共有6种24条 加法运算: (ADD—4条) 带进位加法运算: (ADDC—4条) 带借位减法运算: (SUBB—4条) 加1/减1操作: (INC,DEC—9条) 单字节乘/除法运算: (MUL,DIV—2条) 十进制调整: (DA A—1条)

  22. 2、算术运算类指令(二) • 加法运算:(ADD—4条) • 带进位加法运算: (ADDC—4条) • 带借位减法运算: (SUBB—4条) 所有的加法(ADD)、带进位加法(ADDC)、带借位减法(SUBB)运算都是以 Acc为一个加数或被减数,最终结果也存进 Acc 加法(ADD)、带进位加法(ADDC) 以及带借位减法(SUBB)运算中,如果产生了进位或借位,将自动对PSW中的Cy标志位置“1” 带进位加法(ADDC):(A) ←(A)+(Cy)+(第二操作数) 带借位减法(SUBB):(A)←(A)-(Cy)-(第二操作数)

  23. 2、算术运算类指令(三) 加1/减1操作: (INC,DEC—9条) INC, DEC与用加/减法指令做加1/减1 操作不同之处在于INC、DEC不影响标志位。 单字节乘/除运算: (MUL,DIV—2条) 两个单字节数的乘/除法运算只在A与B之间进行。 MUL AB: (A)与(B)相乘, 积为16位数, (A) ←积的高8位; (B) ←积的低8位 DIV AB: (A)除以(B),结果用2字节表示, (A) ←商的整数部分;(B) ←余数

  24. 2、算术运算类指令(四) 十进制调整: (DA A—1条) 用于两个BCD码之间的相加,这条指令只能跟在ADD 或 ADDC 之后 BCD码是指“用二进制表达的十进制数”。如: 十进制数20可以用二进制数00010100B表示; 也可以用十六进制数14H表示; 还可以用BCD码 00100000B 或 20H 表示。 4个二进制位就可以表示一位BCD码: 0000~1001 可表示十进制数(BCD数) 0~9; 8个二进制位就可以表示两位压缩的BCD码: 00000000~10011001 表示 00~99。

  25. 2、算术运算类指令(五) DA A指令的执行过程 若(A)3~0>9或(AC)=1则(A)3~0←(A)3~0+6; 若(A)7~4>9或(CY)=1则(A)7~4←(A)7~4+6; 如:两个十进制数“65”与“58”相加,根据常识,显然其和应当为“123”。 MOV A, #65H ADD A, #58H DA A 结果:(A) = 23H (Cy) = 1 6 5 0110 0101 5 8 0101 1000 +) +) 6 6 0110 0110 18 19 0010 0011 1 2 3

  26. 3、逻辑运算及移位类指令(一) 该类指令共有5种24条 逻辑与运算: (ANL—6条) 逻辑或运算: (ORL—6条) 逻辑异或运算: (XRL—6条) 累加器清零/取反: (CLR,CPL—2条) 累加器移位操作: (RL,RLC,RR,RRC—4条)

  27. 3、逻辑运算及移位类指令(二) 逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL): 累加器清零/取反操作 (CLR,CPL—2条) CLR A —对累加器清零1 Byte 1 Tm CPL A ——对累加器按位取非1 Byte 1 Tm

  28. 3、逻辑运算及移位类指令(三) 逻辑运算指令在程序中的应用(下面的例子认为Acc的内容为9AH) 逻辑与ANL运算用于对某些位进行清0或者保留: 例: ANL A, #0FH; 则(A) = 0AH 逻辑或ORL运算用于对某些位进行置1或者保留: 例: ORL A, #0FH; 则(A) = 9FH 逻辑异或XRL运算用于对某些位进行取反或者保留: 例: XRL A, #0FH; 则(A) = 95H (A)  1001 1010 #0FH  0000 1111 95H  1001 0101

  29. 3、逻辑运算及移位类指令(四) 累加器移位操作: (RL,RLC,RR,RRC—4条) RL A循环右移 累加器Acc RR A循环左移 累加器Acc RLC A带进位循环右移 累加器Acc Cy RRC A带进位循环左移 Cy 累加器Acc

  30. 4、控制转移类指令(一) 控制转移类指令用于对程序的执行顺序进行控制(即改变PC指针的当前值),该类指令共有4种17条 无条件转移:(LJMP,AJMP,SJMP,JMP—4条) 条件转移(判断跳转):(JZ,JNZ,CJNE,DJNZ—8条) 子程序调用及返回:(LCALL,ACALL,RET,RETI—4条) 空操作:(NOP—1条) “消耗”一个机器周期

  31. 4、控制转移类指令(二) 无条件转移:(LJMP,AJMP,SJMP,JMP—4条) LJMP addr16长跳转指令 ——可在64K范围内跳转 AJMP addr11 绝对跳转指令 ——可在指令所在的2K范围内跳转 SJMP rel 相对跳转指令 ——可在当前PC-128与+127范围内跳转 JMP @A+DPTR 间接长跳转指令 ——可在以DPTR为基址 + A为偏移量 之和所指向的64K程序范围内跳转

  32. 4、控制转移类指令(三) 条件转移:(JZ,JNZ,CJNE,DJNZ—8条) JZ rel JNZ rel ——根据Acc的内容是否为0决定是否跳转 DJNZ direct, rel DJNZ Rn, rel ——将direct(或Rn)里的内容减 1,结果不 等于0就跳转;等于0则不跳转继续执行 程序

  33. 4、控制转移类指令(四) 条件转移: CJNE A,#data, rel CJNE A,direct,rel CJNE @Ri,#data, rel CJNE Rn,#data, rel ——将A(或@Ri,或Rn)与#data(或direct)相比 较,其值不相等就跳转;相等则不跳转,继 续执行程序

  34. 4、控制转移类指令(五) 子程序调用及返回:(LCALL,ACALL,RET,RETI—4条) LCALL addr16 子程序长调用指令 ——可在64K范围内调用子程序 ACALL addr11 子程序绝对调用指令 ——可在指令所在的2K范围内调用子程序 RET子程序返回指令 ——子程序结束并返回调用的下一条指令 RETI中断服务子程序返回指令 ——中断结束/返回被打断处的下一条指令

  35. 5、位操作指令(一) 该类指令共有17条 位传送: (MOV—2条) 位清零/置位:(CLR,SETB—4条) 位逻辑与/或/非运算:(ANL,ORL,CPL—6条) 位条件转移:(JC,JNC,JB,JNB,JBC—5条)

  36. 5、位操作指令(二) 位传送指令(2条): MOV C, bit—— (C)(bit) MOV bit, C—— (bit)(C) 注: bit表示位地址 位清零/置位指令(4条): CLR bit(或C) —— (bit或 C)“0” SETB bit(或C) —— (bit或 C)“1” 位逻辑与/或/非指令(6条): ANL C,bit(或/bit) ORL C,bit(或/bit) CPL bit (或 C) 注: “/bit”表示对bit位先取反然后再参加运算

  37. 5、位操作指令(三) 判位条件转移指令(5条): JC rel —— (Cy)=“1”就跳转;否则不跳转 JNC rel —— (Cy)≠“1”就跳转;否则不跳转 JB bit,rel —— (bit)=“1”就跳转;否则不跳转 JNB bit,rel —— (bit)≠“1”就跳转;否则不跳转 JBC bit,rel —— (bit)=“1”就先将其清零再跳转; 否则不动此位也不跳转。

More Related