1 / 83

3.1 指令格式及常用符号

3.1 指令格式及常用符号. 第 3 章 80C51 的指令系统. 本章内容:. 3.2 80C51 的寻址方式. 3.3 数据传送类指令( 29 条). 3.4 算术运算类指令( 24 条). 3.5 逻辑运算与循环类指令( 24 条). 3.6 控制转移类指令( 17 条). 3.7 位操作类指令( 17 条). 3.1 指令格式及常用符号. 单字节指令. 3.1.1 机器指令的编码格式. 8 位编码仅为操作码 :. 0000 0100. INC A.

Download Presentation

3.1 指令格式及常用符号

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. 3.1 指令格式及常用符号 第3章 80C51的指令系统 本章内容: 3.2 80C51的寻址方式 3.3 数据传送类指令(29条) 3.4 算术运算类指令(24条) 3.5 逻辑运算与循环类指令(24条) 3.6 控制转移类指令(17条) 3.7 位操作类指令(17条)

  2. 3.1 指令格式及常用符号 • 单字节指令 3.1.1 机器指令的编码格式 • 8位编码仅为操作码: 0000 0100 INC A 指令 INC A,编码为04H。A隐含在操作码中。 注意:指令中“A”表示累加器,而“ACC”表示累加器对应的地址(E0H)。

  3. 8位编码含有操作码和寄存器编码 高5位为操作码,低3位为存放操作数的寄存器编码。如:MOV A,R0 1110 1000 MOV A,R0 寄存器号 编码为1110 1000B,可表示为E8H(低3位000为寄存器R0的编码)。

  4. 双字节指令 操作码 0111 0100 MOV A,#50H 0101 0000 操作数 第一字节表示操作码,第二个字节表示参与操作的数据或数据存放的地址。 如:MOV A,#50H 编码为0111 0100B,0101 0000B。其十六进制表示为74H,50H。

  5. 三字节指令 操作码 0111 0101 0010 0000 MOV 20H,#50H 操作数 0101 0000 指令的第一字节表示该指令的操作码,后两个字节表示参与操作的数据或数据存放的地址。 如:MOV 20H,#50H 编码为0111 0101B,0010 0000B,0101 0000B。可表示为75H,20H,50H。

  6. 一般格式: 操作助记符[目的操作数][,源操作数][;注释] 3.1.2 符号指令的格式 无操作数 单操作数 操作数个数 两操作数 三操作数 在两个操作数的指令中,通常目的操作数写在左边,源操作数写在右边。

  7. 如:ANL A,#40H ANL为“与”操作的助记符,立即数“40H”为源操作数,累加器A为目的操作数。 注:在指令中,多数情况下累加器用“A”表示,仅在直接寻址方式中,用“ACC”表示累加器在SFR区的具体地址E0H。 MOV A,#30H;机器码为74H、30H; MOV ACC,#30H;机器码为75H、E0H、30H。

  8. 3.1.3 符号指令及其注释中常用的符号 Rn(n=0~7)-当前工作寄存器组中的寄存器之一; Ri(i=0,1)--当前工作寄存器组中的R0或R1; @ ---------------间址寄存器前缀; #data -----------8位立即数; #data16--------16位立即数; direct-----------片内低128个RAM单元地址及SFR地址(可用符号名称表示);

  9. addr11-----------11位目的地址; addr16-----------16位目的地址; rel-----------------补码形式表示的8位地址偏移量,值在-128~+127范围内; bit----------------片内RAM位地址、SFR的位地址(可用符号名称表示); /-------------------位操作数的取反操作前缀; (×)----------- 表示 × 地址单元或寄存器中的内容; ← ----------------箭头右边的内容送入箭头左边的单元中。

  10. 3.2 80C51的寻址方式 • 寻找操作数或指令的地址的方式。 • 寻址方式有七种,即:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、基址寄存器加变址寄存器变址寻址、相对寻址和位寻址。 若不特别声明,我们后面提到的寻址方式均指源操作数的寻址方式。

  11. 寻址方式及对应的存储器空间

  12. 3.2.1 寄存器寻址 • 操作数在寄存器中,指令中直接给出该寄存器名称。具有较高的传送和运算速度。 R0~R7 A • 寻址空间 B(AB) DPTR 例:MOV A,R0

  13. 例:MOV A,R0;设(R0)=30H,0工作寄存器组 30H 00H 0000H E8H MOV A,R0 7FH 80H RAM 30H A FFH FFFFH SFR ROM 结果:(A)=30H

  14. 3.2.2 直接寻址 • 操作码后的字节是操作数的地址,操作数本身放在该地址指示的存储单元中。 片内RAM( 128字节) • 寻址空间 SFR(常采用符号形式) 如:MOV A,50H

  15. E5H 50H 例:MOV A,50H;设(50H)=3AH 0000H 3AH 50H 7FH MOV A,50H 80H RAM 3AH A FFH FFFFH SFR ROM 结果:(A)=50H

  16. 3.2.3 寄存器间接寻址 • 寄存器中内容为地址,从该地址取操作数。 片内RAM MOV • 寻址空间 MOVX 片外RAM 片内RAM R0或R1 • 间址寄存器 片外RAM(256字节) P2口线,页面方式 DPTR

  17. 例:MOV A, @R0;设(R0)=30H 30H R0 0000H 5AH 30H E6H MOV A, @R0 7FH 80H RAM 5AH A FFH FFFFH SFR ROM 结果:(A)=30H

  18. 3.2.4 立即寻址 • 编码中直接给出操作数。操作码之后的操作数称为立即数。 立即数 • 单字节、双字节 • 标识:# • 源操作数 • 寻址空间:ROM

  19. 74H 50H 例:MOV A, #50H; 0000H 7FH MOV A,#50H 80H RAM 50H A FFH FFFFH SFR ROM 结果:(A)=50H

  20. 3.2.5 变址寻址 • 以一个基地址加上一个偏移量地址形成操作数地址。 DPTR 基址寄存器: PC 操作数地址: 偏移量寄存器:A • 寻址空间:ROM

  21. 例:MOVC A, @A+DPTR ; 0000H MOVC A, @A+DPTR 93H 7FH 80H RAM 00H DPL 2400H+0FH= 240FH 24H DPH 240FH 88H 0FH A 88H FFH FFFFH SFR ROM 结果:(A)=88H

  22. 3.2.6 相对寻址 • 以PC当前值为基准,加上指令中相对偏移量 rel 形成目标地址。 • 目标地址: PC rel + • PC的当前值:读出该2字节或3字节的跳转指令后,PC指向的下条指令的地址。 • rel 取值范围是:-128~+127。(补码)

  23. 40H 75H 例:JC rel ;设 rel=75H,PSW.7为 “1” PC值 字节数 1000H JC rel 1001H 1000H+02H= 1002H 7FH 1002H 80H RAM 1002H+75H= 1077H 1000 0000 PSW 当前PC值 新PC值 1077H FFH SFR ROM 结果:程序转向1077H单元

  24. 3.2.7 位寻址 • 对位地址中内容进行操作。操作的是8位二进制数中的某一位。 片内RAM中位寻址区 • 寻址空间 SFR中的可寻址位 SFR的寻址位常用符号位地址表示,如: CLR ACC.0 MOV 30H,C

  25. 3.3 数据传送类指令(29条) 传送类指令分成两大类 一般不影响PSW状态 • MOV,一般传送 • 非MOV,特殊传送, 如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。

  26. 3.3.1 一般传送指令 • 16位传送 将源操作数data16(通常是地址常数)送入目的操作数DPTR中。 例如: MOV DPTR,#1234H 结果为: (DPH)=12H,(DPL)=34H。

  27. 目的 源操作数 • 8位传送 A A Rn Rn 传送关系 direct direct @Ri @Ri … #data • #data不能用作目的字节; • 源字节与目的字节不相同(除direct外); • 寄存器寻址与寄存器及其间址间不相互传送。

  28. Rn • 以A为目的 direct MOV A, @Ri #data 例:若(R1)= 20H,(20H)= 55H 执行 MOV A,@R1 结果:(A)= 55H。

  29. A • 以Rn为目的 MOV Rn, direct #data 例:若(50H)= 40H 执行 MOV R6,50H 结果:(R6)= 40H。

  30. A • 以direct为目的 Rn MOV direct, direct1 @Ri #data 例:若(R1)=50H,(50H)=18H 执行MOV 40H,@R1 结果:(40H)=18H。

  31. A • 以@Ri为目的 MOV @Ri, direct #data 例:若(R1)=30H,(A)=20H 执行 MOV @R1,A 结果:(30H)=20H

  32. ROM查表 3.3.2 特殊传送指令 • MOVC A,@A+DPTR 以DPTR与偏移量之和作为程序存储器地址,将该地址单元的内容传送到A。指令执行后DPTR的内容不变。 • MOVC A,@A+PC 以PC的当前值与偏移量之和作为程序存储器地址,将该地址单元的内容传送到A。指令执行后PC的内容不变。

  33. 读写片外RAM • 读片外RAM MOVX A,@DPTR MOVX A,@Ri • 写片外RAM MOVX @DPTR,A MOVX @Ri,A

  34. 例3-4① 将地址为3000H的片外数据存储器单元的内容21H传送到片内地址为30H的单元中。 ② 将寄存器R5中的内容32H传送到片外地址为3010H的数据存储器单元中。 用DPTR和@Ri两种方法。 • 例3-6 设在程序存储器地址为1000H~1009H的存储单元中存放0~9的平方表,30H单元中存放变量X,任给X的值,求出,并将Y存入40H单元中。

  35. 堆栈操作 • 原则:向地址高端生长,后进先出 • SP :指向栈顶(活动端),复位值07H • 操作 PUSH direct POP direct 例:若(SP)=07H,(40H)=88H 执行 PUSH 40H 结果:(SP)=08H,(08H)=88H。

  36. 数据交换 交换类指令, 传送是双向的 例:若(R0)=80H,(A)=20H。 执行 XCH A,R0 • 字节交换 Rn XCH A, direct @Ri 结果:(A)=80H,(R0)=20H。

  37. 半字节交换 XCHD A,@Ri SWAP A 例:若(R0)=30H,(30H)=67H, (A)=20H。 执行 XCHD A,@R0 后,(A)=27H,(30H)=60H。 例:若(A)=30H,执行SWAP A后,(A)=03H。

  38. 3.4 算术运算类指令(24条) • 加、减、乘、除及加1和减1等 • 多数以A为源操作数,同时又使A为目的操作数。 • PSW中的OV、CY、AC • CY,无符号整数多字节加、减法、移位等 • OV,可方便的控制补码运算 • AC,用于BCD码运算。

  39. 3.4.1 加法 • 不带进位加 Rn direct ADD A, @Ri #data 影响:CY、AC、OV和P 注:D7、D6位只有一个有进位时,(OV)=1。如:两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果,此时(OV)=1。

  40. (A) 1000 0100 + (30H) 1000 1101 进位 1 1 1 结果 0001 0001 例 若(A)=84H,(30H)=8DH,执行指令 ADD A,30H 之后,由于: CY AC 结果:(A)=11H,(CY)=1,(AC)=1,(OV)=1(D7有进位,D6无进位),(P)=0。

  41. Rn • 带进位加 direct ADDC A, @Ri #data • 源操作数与A的内容相加再与CY相加,结果送入目的操作数A中。 • CY是在该指令执行之前已存在的值。

  42. 增1 A Rn INC direct @Ri DPTR 源操作数的内容加 1 ,结果再送回原单元。这些指令中仅 INC A 影响P标志。

  43. DA A • 十进制调整 对A中刚进行的2个BCD码加法的结果调整。 • 当A中低4位数出现了非BCD码或低4位产生进位(AC=1),则在低4位加6。 • 当A中高4位数出现了非BCD码或高4位产生进位(CY=1),则在高4位加6。 调整后,CY表示结果的百位值。

  44. (A) 0101 0110 + (R2) 0110 0111 1011 1101 调整0110 0110 结果 1 0010 0011 例:若(CY)=0,A和R2内容见下式。执行指令: ADD A,R2 DA A 结果:1 23( BCD数)

  45. 带借位减 3.4.2 减法 Rn direct SUBB A, @Ri #data 影响:CY、AC、OV和P 注:D7、D6位只有一个有借位时,(OV)=1。如要用此组指令完成不带借位减法,只需先清CY为 0 。

  46. (A) 1100 1001 - (CY) 1 1100 1000 - (R2) 0101 0100 结果 0111 0100 例 若(A)=C9H,(R2)=54H,(CY)=1,执行指令 SUBB A,R2 之后,由于: 即:(A)=74H,(CY)=0,(AC)=1,(OV)=1(位6有借位,位7无借位),(P)=0。

  47. 减1 A Rn DEC direct @Ri • 操作数内容减 1 ,结果再送回原单元。 • 仅 DEC A 影响P标志。其余指令都不影响标志位的状态。

  48. MUL AB 3.4.3 乘法 A B X B A 积 被乘数 乘数 • 当乘积大于FFH时,溢出标志位(OV)=1。 • 标志CY总是被清0。 例: 若(A)=50H,(B)=A0H,执行指令 MUL AB 之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。

  49. DIV AB 整数部分 A 3.4.4 除法 A B X 商 B 余数部分 被除数 除数 • 除数为0,商的A和B内容不确定,且(OV)=1 。 • 标志CY总是被清0。 例: 若(A)=FBH(251),(B)=12H(18),执行指令 DIV AB 之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。

  50. 3.5 逻辑运算与循环类指令(24条) • 逻辑运算:与、或、异或、清0和取反 • 对A循环移位 • 方向:左、右 • CY:带、不带 • A清0操作对P标志有影响。

More Related