1 / 137

第三章 指令系统

第三章 指令系统. 3.1.1 指令系统概述. 3.1 指令格式和常用标识符. 指令 是使计算机完成某种操作的命令。 指令系统 是全部指令的集合。. MCS-51 系列单片机指令系统功能强、指令短、执行快,共有 111 条指令。. 数据传送类: 29 条 算术运算类: 24 条 逻辑运算及移位类: 24 条 控制转移类: 17 条 位操作类: 17 条. 单字节指令: 49 条 双字节指令: 45 条 三字节指令: 17 条. 单周期指令: 64 条 双周期指令: 45 条

jonny
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. 第三章 指令系统

  2. 3.1.1 指令系统概述 3.1 指令格式和常用标识符 指令是使计算机完成某种操作的命令。 指令系统是全部指令的集合。 MCS-51系列单片机指令系统功能强、指令短、执行快,共有111条指令。

  3. 数据传送类: 29条 算术运算类: 24条 逻辑运算及移位类:24条 控制转移类: 17条 位操作类: 17条 单字节指令:49条 双字节指令:45条 三字节指令:17条 单周期指令: 64条 双周期指令: 45条 四周期指令: 2 条 存储空间 运算速度 功能

  4. 3.1.2 指令的机器码 计算机操作的直接代码。一般用十六进制数表示。 一、单字节指令 1. 8位编码仅为操作码 如:INC A 功能是累加器A的内容加1。 该指令的编码为:0000 0100B,十六进制表示为04H,累加器A隐含在操作码中。

  5. 2.8位编码含有操作码和寄存器编码 高5位为操作码,低3位为存放操作数的寄存器编码。 如:MOV A,R0 功能是将当前工作寄存器R0中的数据传送到累加器A中。 编码为1110 1000B, 低3位000为寄存器R0的编码。 其十六进制表示为E8H。

  6. 二、双字节指令 第一字节表示操作码,第二个字节表示参与操作的数据或数据存放的地址。 如:MOV A,#50H 功能是将立即数“50H”传送到累加器A中。 编码为0111 0100B , 0101 0000B。 其十六进制表示为74H,50H。

  7. 三、三字节指令 第一字节表示该指令的操作码,后两个字节表示参与操作的数据或数据存放的地址。 如:MOV 20H,#50H 功能是将立即数“50H”传送到内部RAM 的20H单元中。 编码为0111 0101B,0010 0000B,0101 0000B。 其十六进制表示为75H,20H,50H。

  8. 3.1.3 指令的格式 操作码助记符 操作数 ;注释 • 操作码助记符 ●表示指令的操作功能 ● 为便于记忆,通常用与操作相应的英文缩写表示,如加法用ADD,减法用SUBB,传送用MOV等,编译时还原成一定的二进制代码。

  9. 无操作数 单操作数 两操作数 三操作数 • 操作数 ●指参加操作的数据或数据的地址 ●操作数的个数 ●在两操作数的指令中,通常目的操作数写在左边,源操作数写在右边。 ●操作数之间用逗号隔开。

  10. 注释 ●是对指令所做的简要说明 ● 可有可无,不是必备的 ●便于阅读、理解和使用指令 ● 以分号开始,其后为注释部分

  11. 3.1.4 指令中所用到的标识符 • Rn (n=0~7):当前选中的工作寄存器组中的寄存器 R0、R1…R7之一; • Ri (i=0,1) :当前选中的工作寄存器组中的寄存器 R0或R1; • #data :8位立即数,00~FFH中的一个; • #data16 :16位立即数;

  12. direct:片内低128个RAM或SFR的地址; • addr11:11位目的地址,用于ACALL和AJMP指令; • addr16:16位目的地址,用于LCALL和LJMP指令; • rel:补码形式表示的8位带符号地址偏移量, 偏移范围为-128~+127; • bit:片内RAM或SFR的位地址; • /:该位求反后参与操作,不影响该位原值;

  13. @:间接寻址寄存器的前缀; • @Ri : 寄存器间接寻址,Ri为R0或R1; • @DPTR : 间接寻址,对外部RAM/ROM寻址。 • (×):表示由×所指的地址单元的内容; • ←:箭头右边的内容送入箭头左边的单元内; • $:当前指令的地址。

  14. 对MCS-51单片机,操作数存放在哪些地方? 寻址方式有哪些呢? 3.2 MCS-51单片机寻址方式 • 寻址 CPU到不同的地址空间寻找操作数的过程。 • 寻址方式 寻找操作数地址的方法。

  15. 寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 变址寻址 相对寻址 位寻址 注意: 下面所提到的寻址方式均指源操作数的寻址方式。

  16. 当前选中的通用寄存器R0~R7; 部分SFR。如累加器A,寄存器B,数据指针DPTR等。 1、寄存器寻址 操作数存放在寄存器中,指令中直接给出寄存器名称。 寻址空间为

  17. MOV A,R5 ;A←R5,即R5里面的数送到A中 若R5中的数为4AH,则指令执行后A 中的数也是4AH。 指令代码为EDH(1110 1101) ,低3位中的101表示操作数在R5中。

  18. 片内RAM128个单元; 所有特殊功能寄存器(SFR)。 2、直接寻址 操作数在存储单元中,指令中直接提供存储单元地址。 寻址空间为 说明:这是唯一能访问SFR的寻址方式。

  19. 注意1 • 低128单元,在指令中应以单元地址的形式出现。 MOV A,direct ;A←(direct),即直接地址单元中的内容送到A中 MOV direct ,direct ; (direct) ←(direct) 即直接地址单元中的内容送到另一个直接地址单元中 MOV A, 65H ;A ← (65H) 即将65H单元中的数送到A中

  20. 注意2 • 对特殊功能寄存器,在指令中可以SFR的名称出现,也可以SFR所在的单元地址出现,但通常都以SFR的名称出现。 MOV A, P0; A ← P0,将P0中的数送到A中 MOV A, 80H;A ←(80H),将80H单元的内容送到A中。 汇编后机器码完全一样,都是E5H,80H

  21. 注意3 • 通用寄存器Rn是内存单元的一部分,在指令中若以Rn的名称出现,则属于寄存器寻址方式;若以Rn所在的单元地址出现,则属于直接寻址方式。 设通用寄存器选择第0组,则R0就是片内 RAM 00H单元 MOV A,R0 ;A←R0,即R0里面的数送到A中 MOV A,00H ;A←(00H),即00H单元中的数送到A中

  22. 这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去。这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去。 • 区别:机器码不同 第一个指令为E8H,第二个为E5H,00H。

  23. 注意4 • 累加器有A、ACC、E0H三种表示形式,指令的执行结果相同,但分属于两种不同的寻址方法。 INC A ; 寄存器寻址,机器码为04H INC ACC 直接寻址,机器码为05H,E0H INC 0E0H 说明:在指令中,多数情况下累加器用“A”表示,仅在直接寻址方式中,用“ACC”表示累加器在SFR区的具体地址E0H。

  24. ROM 3、立即寻址 操作数是常数,包含在指令当中,位于操作码之后,与操作码一起存放在程序存储器中,可以立即得到并执行,不需要经过别的途径去寻找。常数又称为立即数,故又称为立即寻址。 寻址空间为

  25. 说明 • 在汇编指令中,立即数前面以“#”符号作前缀。 • 立即数可以是1个字节,也可以是两个字节。 • 由于立即数是一个常数,故只能作为源操作数。 • 在程序中通常用于给寄存器或存储器单元赋初值。

  26. MOV A,#20H ; A←20H MOV R7, #0F5H ;R7←F5H MOV P1, #80H ;P1 ←80H MOV DPTR,#3FA6H ;DPH ←3FH, DPL ←A6H

  27. R0或R1 —— 用于寻址片内RAM低128字节及片外RAM低256字节。 DPTR —— 用于寻址片外RAM 64K字节。 4、寄存器间接寻址 —— 间址 以某寄存器的内容为地址,从该地址去取操作数。 @为间址提示符。 可用的间址寄存器为

  28. 注意 • “间址”不能用来访问SFR。 • 片内RAM访问用MOV指令; • 片外RAM访问用MOVX指令。

  29. MOV A,@R0 ; A←(R0), 操作数在片内RAM中. 以R0的内容为地址,将该地址中的内容送到A中。 MOVX A,@R0 ; A←(R0), 操作数在片外RAM中. MOVX A,@DPTR ; A←(DPTR), 操作数在片外RAM中. 以DPTR的内容为地址,将该地址中的内容送到A中。

  30. ROM , 用于访问ROM中的数据表格 5、变址寻址 • 基址寄存器+变址寄存器 间接寻址 • 以DPTR或PC为基址寄存器,累加器A为变址寄存器。 • 把两者内容相加,结果作为操作数的地址。 寻址空间为

  31. JMP @A+DPTR ; 无条件转移指令 A+DPTR 作为一个地址,程序跳转到该地址执行。 MOVC A, @A+DPTR ; A←(A+DPTR) MOVC A, @A+PC ; A←(A+PC)

  32. 程序存储区 2040H 93 A ALU DPH 20 2041H … DPL 00 E0 …… 20E0H 47 MOVC A, @A+DPTR ; A←(A+DPTR) 设DPTR=2000H,A=E0H 47 指令代码 20E0H

  33. 程序存储区 2040H 83 A ALU 2041H… E0 …… 2120H 47 2121H 45 MOVC A, @A+PC ; A←(A+PC) 设A=E0H 指令代码 45 当前PC 2121H

  34. MOVC A, @A+DPTR ; A←(A+DPTR) MOVC A, @A+PC ; A←(A+PC) 查表操作 ,功能一样,区别是 • DPTR在使用前可以赋值,查表范围可达64K。 • PC的值是固定的,A的内容为无符号数,因此只能在当前指令下256个地址单元范围内进行查表。

  35. 6、相对寻址 PC的当前值与指令中给出的偏移量rel相加,结果作为跳转指令的目标地址。 注意 • PC的当前值是跳转指令执行时的PC值,即转移指令的下一条地址。 • 偏移量rel是8位带符号数。以补码表示,它的取值范围为-128~+127。当为负值时,向前转移,当为正数时向后转移。

  36. 程序存储区 1000H 80 ALU 1001H23 1002H×× …… 1024H ×× 1025H ×× 如: SJMP rel ; 转移指令 设rel=23H 指令代码 1002H 23H 当前PC 1025H

  37. 片内RAM 20H~2FH,共16个单元,128个位地 址,范围为 00H~7FH。 11个可位寻址的SFR,83个位地址。 6、位寻址 MCS-51单片机具有位处理功能,因此有相应的位寻址方式。 寻址空间为

  38. 位地址的表示方式 1、直接使用位地址(00~7FH,SFR的83个位地址) 如: SETB 3DH; 将27H.5位置1 MOV C,30H; C ← 26H.0 CLR 0D7H; 将PSW.7位清零 2、字节地址带位号 如: SETB 27H.5; MOV C, 26H.0 ; CLR 0D0H.7;

  39. PSW.4 PSW.3 PSW.7 PSW.6 PSW.5 PSW.2 PSW.1 PSW.0 3、特殊功能寄存器名带位号 例如: CLR PSW.7 ;PSW.7 表示PSW的第7位 ; SETB P0.1 ; P0.1表示P0口的第1位。 4、特殊功能寄存器所含位的位名称 例如: CLR C; MOV 30H,C

  40. 3.3 数据传送指令 数据传送指令有29条,是指令系统中数量最多、使用也最频繁的一类指令。 这类指令可分为三组: 指令助记符: MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP • 普通传送指令; • 数据交换指令; • 堆栈操作指令。

  41. 源操作数可以是:累加器A、通用寄存器Rn、直接地址direct、间接地址和立即数;源操作数可以是:累加器A、通用寄存器Rn、直接地址direct、间接地址和立即数; • 目的操作数可以是:累加器A、通用寄存器Rn、直接地址direct、间接地址。

  42. 一、普通传送指令(22条) 普通传送指令以助记符MOV为基础。 分成片内数据存储器传送指令、片外数据存储器传送指令和程序存储器传送指令。 1.片内数据存储器传送指令MOV (16条) 指令格式:MOV 目的操作数,源操作数 源操作数可为:A、Rn、@Ri、direct、#data; 目的操作数可为:A、Rn、@Ri、direct。

  43. 按目的操作数的寻址方式划分为五组: (1)以A为目的操作数(4条) MOV A,Rn ;A←Rn,Rn的内容送给A MOV A,direct ; A←(direct) MOV A,@Ri ;A←(Ri) MOV A,#data ;A← #data (2)以Rn为目的操作数(3条) MOV Rn,A ;Rn←A MOV Rn,direct ;Rn←(direct) MOV Rn,#data ;Rn←#data

  44. (3)以直接地址direct为目的操作数(5条) MOV direct,A ;(direct)←A MOV direct,Rn ;(direct)←Rn MOV direct,direct ;(direct)←(direct) MOV direct,@Ri ;(direct)←(Ri) MOV direct,#data ;(direct)← #data 例: MOV 20H,A ;20H←A MOV 20H,R1 ;20H ← R1 MOV 20H,30H ;20H←(30H) MOV 20H,@R1 ;20H←(R1) MOV 0A0H,#34H ; A0H←34H MOV P2,#34H ; P2←34H

  45. (4)以间接地址@Ri为目的操作数(3条) MOV @Ri,A ;(Ri)←A MOV @Ri,direct ;(Ri)←(direct) MOV @Ri,#data ;(Ri)← #data 功能:把源操作数指定的内容送入以R0或R1为地址指针 的片内存储单元中。 例: MOV @R0,A MOV @R1,20H MOV @R0,#34H

  46. (5)以DPTR为目的操作数(1条) MOV DPTR,#data16 ;DPTR← #data16 8051是8位机,这是唯一的一条16位立即数传送指令。 功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。 例:MOV DPTR,#1234H ;DPH=12H, DPL= 34H 等同于分别向DPH,DPL送数,即 MOV DPH,#12H MOV DPL,#34H

  47. 注意 • 源操作数和目的操作数中的Rn和@Ri不能相互配对。 即在MOV指令中,不允许在一条指令中同时出现工作寄存器,无论它是寄存器寻址还是寄存器间接寻址。 例如,不允许下面的指令 MOV Rn,Rn MOV @Ri,Rn

  48. 例:顺序执行下列指令序列,求每一步执行结果。 • MOV A,#30H • MOV 4FH,A • MOV R0,#20H • MOV @R0,4FH • MOV 21H,20H ;A=30H ;(4FH)=30H ;R0=20H ;(20H)=30H ;(21H)=30H 练习题:用两种寻址方式实现,将片内RAM 60H单元的 数据传送给累加器A。 解: MOV A,60H MOV R0,#60H MOV A,@R0

  49. 说 明: ① 一条指令中不能同时出现两个工作寄存器。非法指令: MOV R1,R2 MOV R2,@R0 ② 间址寄存器只能使用 R0、R1。非法指令: MOV A,@R2 ③ SFR区只能直接寻址,不能用寄存器间接寻址。非法指令: MOV R0,#80H MOV A,@R0

  50. ④ 目的操作数不能为立即数。非法指令: MOV #data,A ⑤ 除了以A为目的操作数的指令影响PSW中的奇偶标志P外,一般不影响标志位。 ⑥ 关注指令表中指令字节数、机器周期数。除操作码外,直接地址或立即数要占一个字节。 ⑦ 只有指令表中的指令才有对应机器码,计算机才能执行。编程时,不能自己随意发明创造指令。

More Related