1 / 102

计算机硬件技术基础

计算机硬件技术基础. 专题四 MCS-51 指令系统 第三章. 计算机科学与软件学院计算机基础教学部. 本专题是全书的重点, 是汇编语言程序设计的基础。. 学习指令系统重点要掌握以下几点: 1 、指令功能 2 、寻址方式 3 、操作数的位数和存储结构 4 、对 PSW 的影响 5 、指令与存储区的对应关系 6 、各类指针及其指向的地址范围 7 、转移指令的转移范围 8 、指令字节数和机器周期数. 第三章 单片机的指令系统. Ø  本章主要介绍单片机的寻址方式及指令系统, 是必须掌握的内容。

Download Presentation

计算机硬件技术基础

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指令系统 第三章 计算机科学与软件学院计算机基础教学部

  2. 本专题是全书的重点, 是汇编语言程序设计的基础。 学习指令系统重点要掌握以下几点: 1、指令功能 2、寻址方式 3、操作数的位数和存储结构 4、对PSW的影响 5、指令与存储区的对应关系 6、各类指针及其指向的地址范围 7、转移指令的转移范围 8、指令字节数和机器周期数

  3. 第三章 单片机的指令系统 • Ø 本章主要介绍单片机的寻址方式及指令系统, • 是必须掌握的内容。 • Ø一台计算机所有指令的集合, • 称为该计算机的指令系统。 • Ø各种计算机都有专用的指令系统。 • 学时分配:2学时 1—40+46~49+52+53 • 2学时 41-45+50+51 • 54—100

  4. 第三章 单片机的指令系统 • 3.1 MCS-51指令系统概述 • 3.2 寻址方式 • 3.3 MCS-51 单片机的指令系统

  5. 3.1 MCS-51 指令系统概述 3.1.1 指令格式 3.1.2 指令字长和指令周期 3.1.3 指令分类

  6. 3.1.1 指令格式 • 汇编语言指令格式 • 机器语言指令格式

  7. 汇编语言指令 一条用助记符表示的汇编语言指令 操作数 操作码 指令的操作对象 指令的功能 ADD A , #10H ;ADD为操作码, A及#10H为操作数

  8. 汇编语言指令格式 标号:操作码助记符 目的操作数,源操作数;注释 例如:Loop:MOV A,R0; (R0) --->(A)

  9. 机器语言指令格式 三字节: 操作数或寻址方式 操作数或寻址方式 操作码 单字节: 或 操作码 操作数或寻址方式 操作码 双字节: 操作码 操作数或寻址方式 例:ADD A , #10H

  10. 3.1.2 指令字长和指令周期 指令字长有三种: 单字节 RET 双字节 MOV A,#68H 三字节 MOV 30H,46H 指令周期是指执行一条指令所需要的时间 1 机器周期指令 2 机器周期指令 4 机器周期指令 P318附录II 附表1

  11. 3.1.3 指令分类 按指令功能分类 按指令执行时间分类 按指令字长分类

  12. 3.2 寻址方式 • 寻址方式:7种 • 寄存器寻址 • 直接寻址 • 寄存器间接寻址 • 立即寻址 • 变址间接寻址 • 相对寻址 • 位寻址 • 寻址方式与寻址空间 • MCS-51单片机的两个突出特点 寻址: 1、寻找操作数 2、为PC指针寻找目标地址

  13. 寄存器寻址——操作数存放在寄存器中 寄存器为R0~R7,A,DPTR,C,AB SETB RS0 MOV R3,#56H MOV A,R0 MOV R0,#01001111B 工作寄存器(00H—1FH) RS1 RS0 寄存器组 片内RAM地址 寄存器 0 0 第0组 00H~07H R0~R7 0 1 第1组 08H~0FH R0~R7 1 0 第2组 10H~17H R0~R7 1 1 第3组 18H~1FH R0~R7

  14. 例如:MOV A , R3 ;机器码为 0EBH 指令功能是把当前R3中的操作数送累加器A。 指令执行示意图如图3-3所示。设(R3)=12H

  15. 直接寻址—指令中直接给出操作数的地址 • 功能最强,可访问3种地址空间 • 内部数据存储器地址空间(RAM): • 00H-7FH • MOV A,00H • MOV 30H,20H • 特殊功能寄存器地址空间,唯一方式 •  80H-0FFH • MOV A,90H • MOV A,B • 位地址空间 • 00H-0FFHMOV C,00H

  16. 例: MOV A ,30H;机器码为E530H 指令功能是把直接地址30H单元的内容送累加器A,即(30H) →(A)如图3-1所示。 34H 34H

  17. 寄存器间接寻址 01 02 03 30H 31H 32H • 将指定的寄存器的内容为地址,由该地址所指定的单元内容作为操作数。 • mov A,@R0 (R0)=31H 指针 (A)=02H ((R0))=(31H)

  18. 例如: MOV A ,@R1 ;机器码E7H 设(R1)=60H , (60H)=50H , 执行结果(A)=50H,该指令执行过程如图3-4所示。

  19. 立即寻址——在指令中直接给出操作数 例: MOV A,#7Ah; 747AH 把立即数7AH送累加器A,指令执行示意图如图3-2所示。

  20. 例: MOV DPTR,#1234h (DPH)=12H (DPL)=34H 注意:立即数前加“ # ”号,以区别直接地址。 例如: MOV A,#30H ;(A) ← 30H MOV A, 30H ; (A) ←(30H)

  21. 变址间接寻址 • 基址寄存器+变址寄存器的间接寻址方式 • DPTR/PC A • MOVC A,@ A+DPTR • (A) ((DPTR) + (A)) • MOVC A,@ A+PC • (A) ((PC) + (A) ) • JMP @ A+DPTR • (PC)=(A)+(DPTR)

  22. MOVC A ,@A+PC ;83H 设执行指令之前(A)= 50H 指令功能是把该指令当前地址PC值与A累加器内容相加形成操作码地址3F51H,3F51H中的内容37H送A累加器。 PC 当前值

  23. jc Loop rell Loop: 相对寻址 • 以当前的PC值为基准,加上指令中给出的相对偏移量(rel)形成有效的转移地址。 • jc Loop; 补码 [-128,127] rel

  24. JC rel; 4085H 设rel=85H ,Cy=1 目标地址 PC当前值

  25. 位寻址 bit 位寻址范围: 1、内部RAM的位寻址区,共16个单元的128位,字节地址为20H~2FH,位地址为00H~7FH。可用直接位地址或字节地址加位的表示方法。 例如: MOV C , 7AH 或  MOV C , 2FH.2

  26. 2、特殊功能寄存器SFR可供位寻址的专用寄存器共11个,实有位地址位83位。位地址有4种表达方式 。 以对程序状态寄存器PSW辅助进位位AC进行操作为例:  PSW Cy AC F0 RS1 RS0 OV PD0H D7H D6H D0H 1)直接使用位地址 3)单元地址加位的表示法 MOV C ,0D6H MOV C ,0D0H.6 2)位名称表示法 4)专用寄存器符号加位的表示法 MOV C ,AC MOV C , PSW.6

  27. 寻址方式与寻址空间

  28. T1 内部数据存储器与内部I/O口统一编址 1、内部数据存储器的寻址方式 1) 00H~1FH寄存器寻址 4组R0 ~R7 Rn 直接寻址 direct 寄存器间接寻址 @R0,@R1 例:(01H) (02H) MOV 02H,01H ;源寻址和目的寻址均为直接寻址 MOV R2,01H ;源寻址为直接寻址,目的寻址为寄存器寻址 MOV R0,#01H MOV 02H,@R0;源寻址为寄存器间接寻址, 目的寻址为直接寻址

  29. 2)20H ~2FH 可位寻址区的寻址方式 字节寻址方式: 直接寻址 direct 寄存器间接寻址@R0,@R1 位寻址: bit 直接寻址 例: MOV 26H,C ; 位寻址 (26H)1位 MOV 26H,A ;字节寻址(26H)8位

  30. 3)30H ~7FH 数据缓冲区的寻址方式 字节寻址方式: 直接寻址 direct 寄存器间接寻址@R0,@R1 例:MOV 56H,A ;字节寻址(56H)8位 MOV R0,#66H MOV @R0,#56H 可以将用户堆栈设在该区内,堆栈指针SP

  31. 2、SFR 及I/O口的操作——只能直接寻址 例: P1 口 90H MOV A,90H MOV A,P1 MOV P1,A 3、关于A累加器有两种寻址方式: MOV A,#23H ; A寄存器寻址 PUSH ACC POP 0E0H 统一编址 ;直接寻址

  32. 4、可做片内RAM的指针有: R0,R1, 四个组共有8个 预先设置RS1、RS0,以选定组。 SETB RS0 CLR RS1; 1组 MOV R0,#34H ;R0的地址是? SETB RS1 ; 3组 MOV R0,#68H ; R0的地址是? R0/R1指向的地址范围:00H~7FH

  33. 片外数据存储区和外部扩展的I/O口的寻址方式 指针:R0,R1 8位 DPTR 16位 指令助记符: MOVX 例: MOV DPTR,#2000H MOV A,#34H MOVX@DPTR,A T2 只能寄存器间接寻址 外部数据存储器的地址,或I/O口的地址 16位 统一编址 高8位地址 或 低8位地址 MOV P2,#20H MOV R0,#00H MOV A,#34H MOVX @R0,A R0/R1指向的地址范围: 00H~0FFH

  34. 3.3 MCS-51 单片机的指令系统 • 指令描述符号简介 • 指令分类: • 数据传送类指令(29)传送类指令举例 • 算术运算类指令(24) • 逻辑运算类指令(24) • 控制转移类指令 (17) • 布尔处理类指令(17)

  35. 指令描述符号(1) P68 • Rn--R0~R7 工作寄存器R0~R7,n=0~7 • direct-- 8位直接地址,表示直接寻址方式 • @Ri-- 只能是R0或R1,所以i=0,1 • #data -- 8位立即数,数据范围00H~FFH • #data16 -- 16位立即数,数据范围0000H~FFFFH • addr16 -- 16位目标地址 • addr11 -- 低11位目标地址

  36. 指令描述符号(2) • rel 8位带符号地址偏移量, [-128,127]补码 • bit 位地址 • $ 当前指令地址 •  •  • ( ) • ( ( ) )

  37. 数据传送类指令(1) 内部 direct 直接 寻址 @Ri 间接 寻址 A 累加器 Rn 寄存器 data 立即数

  38. 数据传送类指令(2) • mov A,Rn ; (A)  (Rn) n=0~7 • mov A,direct ; (A)  (direct) • mov A, @Ri ; (A)  ((Ri)) i=0,1 • mov A,#data ; (A)  #data • mov Rn,A ; (Rn)  (A) • mov Rn,direct ; (Rn)  (direct) • mov Rn,# data; (Rn)  #data

  39. 数据传送类指令(3) MOV @R1,@R0 • mov direct,A ; (direct)  (A) • mov direct,Rn ; (direct)  (Rn) n=0~7 • mov direct,direct ; (direct)  (direct) • mov direct, @Ri ; (direct)  ((Ri)) i=0,1 • mov direct,#data ; (direct)  #data • mov @Ri,A ; ((Ri))  (A) • mov @Ri,direct; ((Ri))  (direct) • mov @Ri,# data ; ((Ri))  #data MOV R3,@R0 MOV @R1, R0 MOV R1, R0

  40. 数据传送类指令(4) 交换指令 • xch A, Rn ; (A)  (Rn) n=0~7 • xch A,direct ; (A)  (direct) • xch A, @Ri ; (A)  ((Ri)) i=0,1 • xchd A,@Ri ; (A 0~3)  ((Ri)0~3 ) • swap A; (A 0~3 ) (A 4~7)

  41. 数据传送类指令(5) 堆栈操作 • pop direct ; (direct)  ((sp)) ,(sp)  (sp)-1 • push direct ; (sp)  (sp)+1,((sp)) (direct) 1、堆栈 一种数据结构,是 “先进后出”的线性表。 2、堆栈操作: 压入 PUSH , 弹出 POP 3、堆栈区: 占片内RAM 中连续的存储单元 复位后,系统自动将SP指针指向07H 用户可将堆栈区设在30H~7FH数据缓冲区内, MOV SP,#5FH

  42. 堆栈有两种类型:向上生长型和向下生长型,如图2-5所示。 向上生长型堆栈,栈底在低地址单元。随着数据进栈,地址递增,SP 的内容越来越大,指针上移;反之,随着数据的出栈,地址递减,SP的内容越来越小,指针下移。如(b)图所示。 栈顶 栈顶

  43. MCS-51属向上生长型堆栈,这种堆栈的操作规则如下: 进栈操作:先SP加1,后写入数据。 出栈操作:先读出数据,SP减1。 向下生长型堆栈,栈底设在高地址单元。随着数据进栈,地址递减,SP内容越来越小,指针下移;反之,随着数据的出栈,地址递增,SP内容越来越大,指针上移。其堆栈操作规则与向上生长型正好相反。如(a)图所示。

  44. 堆栈的使用有两种方式: 一种是自动方式,即在调用子程序或断点时,断点地址自动进栈。程序返回时,断点地址再自动弹回PC。这种操作无需用户干预。 另一种是指令方式,即使用专用的堆栈操作指令,执行进出栈操作,其进栈指令为PUSH,出栈指令为POP。 例如: 保护现场就是一系列指令方式的进栈操作; 而恢复现场则是一系列指令方式的出栈操作。 需要保护多少数据由用户决定。

  45. 保护现场: PUSH ACC PUSH PSW PUSH 01H ….. 恢复现场: POP 01H POP PSW POP ACC 举例:

  46. 数据传送类指令(6) 外部 • movx A, @Ri ; (A)  ((Ri)) i=0,1 • movx A,@DPTR ; (A)  ((DPTR)) • movx @Ri,A; ((Ri))  (A) • movx @DPTR,A ; ((DPTR))  (A) • movc A,@A+DPTR ; (A) ((A)+(DPTR)) • movc A,@A+PC; (PC)  (PC)+1 , • (A)  ((A)+(PC)) 外部数据 外部程序 内部 16位 mov DPTR,#data16; (DPTR)  #data16

  47. 传送类指令举例: [例3-1]已知(R0)=30H,问执行如下程序,A、R4、30H和31H单元的内容是什么。 MOV A , #10H MOV R4 ,#36H MOV @R0 ,#7AH MOV 31H ,#01H 解:8031执行上述指令后的结果为: (A)=10H (R4)=36H (30H)=7AH (31H)=01H

  48. [例3-2]设内部RAM中30H单元的内容为40H ,40H单元的内容为10H,P1口作输入口,其输入数据为0CAH,程序及执行后的结果如下: MOV R0,#30H ;单元地址30H送R0中 MOV A ,@R0 ;R0 间址,将30H单元内容送A MOV R1 ,A ;A送R1 MOV B ,@R1;R1间址,将40H单元内容送B MOV @R1,P1;将P1内容送40H单元 MOV P2 , P1 ;将P1内容送P2 执行结果:(R0)=30H , (R1)=40H , (A)=40H , (B) =10H ,(P1)=0CAH (40H)=0CAH , (P2)=0CAH

  49. [例3-3]已知片外RAM 的70H单元中的一个数X ,需送到片外RAM的 1010H单元,试编写程序。 解: ORG 1000H MOV R0 ,#70H MOV DPTR ,#1010H MOVX A ,@R0 MOVX @DPTR ,A SJMP $ END 外部RAM之间不能直接传送数据,必须通过累加器A传送 MOVX @DPTR,@R0

  50. [例3-5]设(30H)=X ,(40H)=Y ,试利用堆栈区域实现30H和40H单元中的数据交换。 解:堆栈区是片内RAM的一个数据区,进栈和出栈的数据符合“先进后出”的原则。 MOV SP ,#50H ;设栈底(栈底不存数) PUSH 40H ;(51H) ← (40H) PUSH 30H ;(52H) ← (30H) POP 40H ;(40H) ← (52H) POP 30H ;(30H) ← (51H)

More Related