1 / 98

2.1 简介 2.2 寻址方式 2.3 指令系统

第 2 章 MCS-51 指令系统. 2.1 简介 2.2 寻址方式 2.3 指令系统. 2.1 简 介. 2.1.1 指令概述 计算机之所以能够按照人们的意愿工作,是因为人们给了它相应命令。这些命令是由计算机所能识别的指令组成的。指令是 CPU 用于控制功能部件完成某一指定动作的指示和命令。

Download Presentation

2.1 简介 2.2 寻址方式 2.3 指令系统

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章MCS-51指令系统 2.1 简介 2.2 寻址方式 2.3 指令系统

  2. 2.1 简介 2.1.1 指令概述 计算机之所以能够按照人们的意愿工作,是因为人们给了它相应命令。这些命令是由计算机所能识别的指令组成的。指令是CPU用于控制功能部件完成某一指定动作的指示和命令。 一台微机所具有的所有指令的集合,就构成了指令系统。指令系统越丰富,说明CPU的功能越强。例如,Z80 CPU中,没有乘法和除法指令,乘法和除法运算必须用软件来实现,因此执行速度相对较慢;而MCS-51单片机提供了乘法和除法指令,实现乘法和除法运算时就要快得多。

  3. 一台微机能执行什么样的操作,是在微机设计时确定的。一条指令对应着一种基本操作。由于计算机只能识别二进制数,所以指令也必须用二进制形式来表示,称为指令的机器码或机器指令。一台微机能执行什么样的操作,是在微机设计时确定的。一条指令对应着一种基本操作。由于计算机只能识别二进制数,所以指令也必须用二进制形式来表示,称为指令的机器码或机器指令。 MCS-51单片机指令系统共有33种功能,42种助记符,111条指令。

  4. 2.1.2 指令格式 在实训中看到,不同指令翻译成机器码后字节数也不一定相同。按照机器码个数,指令可以分为以下三种:

  5. MCS-51单片机指令系统包括49条单字节指令、46条双字节指令和16条三字节指令。 采用助记符表示的汇编语言指令格式如下: 标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由1~8个字符组成,第一个字符必须是英文字,不能是数字或其它符号;标号后必须用冒号。

  6. 操作码表示指令的操作种类,如MOV表示数据传送操作,ADD表示加法操作等。操作码表示指令的操作种类,如MOV表示数据传送操作,ADD表示加法操作等。 操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CPL A指令;有两个操作数,如MOV A,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。 注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。

  7. 2.2 寻址方式 操作数是指令的重要组成部分,指出了参与操作的数据或数据的地址。寻找操作数地址的方式称为寻址方式。一条指令采用什么样的寻址方式,是由指令的功能决定的。寻址方式越多,指令功能就越强。 MCS-51指令系统共使用了7种寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址等。实训中,我们初步接触了寄存器寻址、立即数寻址、直接寻址和寄存器间接寻址等4种寻址方式。

  8. 1. 寄存器寻址 寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。 如果程序状态寄存器PSW的RS1RS0=01(选中第二组工作寄存器,对应地址为08H~0FH),设累加器A的内容为20H,则执行MOV R1,A指令后,内部RAM 09H单元的值就变为20H,如图3.1所示。

  9. 例: MOV P1,A ;将累加器A的内容送 到P1口 MOV P1,R4 ;将寄存器R4的内容送到P1口 CLR A ;将累加器A清0 CPL A ;将累加器A中的内容取反 RL A ;将累加器A的内容循环左移

  10. 图2.1 寄存器寻址示意图

  11. 图2.2 直接寻址示意图

  12. 2. 直接寻址 直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。 例如,指令MOV A,3AH执行的操作是将内部RAM 中地址为3AH的单元内容传送到累加器A中,其操作数3AH就是存放数据的单元地址,因此该指令是直接寻址。 设内部RAM 3AH单元的内容是88H,那么指令MOV A,3AH的执行过程如图2.2所示。

  13. 例: MOV P1,20H ;将20H单元的内容传送到P1口 3. 立即数寻址 立即数寻址是指将操作数直接写在指令中。 例如,指令MOV A,#3AH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。注意:立即数前面必须加“#”号,以区别立即数和直接地址。该指令的执行过程如图2.3所示。

  14. 图2.3 立即数寻址示意图

  15. MOV P1,#55H ;将立即数55H送P1口 MOV 20H,#55 ;将立即数55H送20H 单元 MOV A,#0F0H ;将立即数0F0H送累加器A MOV R4,#0FH ;将立即数0FH送寄存器R4中 MOV R0,#20H ;将立即数20H送寄存器R0口

  16. AND A,#0FH ;累加器A的内容与立即数0FH进行逻辑与操作 OR A,#0F0H ;累加器A的内容与立即数0F0H进行逻辑或操作 MOV A,#01H ;将立即数01H送累加器A中 MOV A,#55H ;将立即数55H送累加器A中

  17. 4. 寄存器间接寻址 寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。 在MCS-51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,称为寄存器间接寻址寄存器。 注意:间接寻址寄存器前面必须加上符号“@”。例如,指令MOV A,@R0执行的操作是将R0的内容作为内部RAM的地址,再将该地址单元中的内容取出来送到累加器A中。

  18. 设R0=3AH,内部RAM 3AH中的值是65H,则指令 • MOV A,@R0的执行结果是累加器A的值为65H,该指令的执 • 行过程如图2.4所示。 • MOV P1,@R0 ;将R0所指的存 储 • 单元的内容送P1口

  19. 图2.4 寄存器间接寻址示意图

  20. 5. 变址寻址 • 变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。DPTR或PC是基址寄存器,累加器A是变址寄存器。该类寻址方式主要用于查表操作。 • 例如,指令MOVC A,@A+DPTR执行的操作是将累加器A和基址寄存器DPTR的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送到累加器A中。 • 设累加器A=02H,DPTR=0300H,外部ROM中,0302H单元的内容是55H,则指令MOVC A,@A+DPTR的执行结果是累加器A的内容为55H。该指令的执行过程如图2.5所示。

  21. 图2.5 变址寻址示意图

  22. 6. 相对寻址 相对寻址是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。 例如,指令SJMP 54H执行的操作是将PC当前的内容与54H相加,结果再送回PC中,成为下一条将要执行指令的地址。 设指令SJMP 54H的机器码80H 54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。该指令的执行过程如图2.6所示。

  23. 图2.6 相对寻址示意图

  24. 7. 位寻址 位寻址是指按位进行的寻址操作,而上述介绍的指令都是按字节进行的寻址操作。MCS-51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。 位寻址区包括专门安排在内部RAM中的两个区域:一是内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,位地址为00H~7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址,参见有关章节中位地址定义。

  25. 例如,指令SETB 3DH执行的操作是将内部RAM位寻址区中的3DH位置1。 设内部RAM 27H单元的内容是00H,执行SETB 3DH后,由于3DH对应内部RAM 27H的第5位,因此该位变为1,也就是27H单元的内容变为20H。该指令的执行过程如图2.7所示。

  26. 图2.7 位寻址示意图

  27. 2.3 指令系统 MCS-51单片机指令系统包括111条指令,按功能可以划分为以下5类 数据传送指令(29条) 算术运算指令(24条) 逻辑运算指令(24条) 控制转移指令(17条) 位操作指令(17条)

  28. 符 号 含 义 Rn 表示当前选定寄存器组的工作寄存器R0~R7 Ri 表示作为间接寻址的地址指针R0~R1 #data 表示8位立即数,即00H~FFH #data16 表示16位立即数,即0000H~FFFFH addr16 表示16位地址,用于64K范围内寻址 addr11 表示11位地址,用于2K范围内寻址 direct 8位直接地址,可以是内部RAM区的某一单元或某一专用功能寄存器的地址 Rel 带符号的8位偏移量(-128~+127) Bit 位寻址区的直接寻址位 (X) X地址单元中的内容,或X作为间接寻址寄存器时所指单元的内容 ← 将 ← 后面的内容传送到前面去 2.3.1 指令系统中的符号说明 指令的书写必须遵守一定的规则,为了叙述方便,我们采用表2.2的约定。 表2.2 指令描述约定

  29. 2.3.2 数据传送类指令 数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令,包括内部 RAM、寄存器、外部RAM以及程序存储器之间的数据传送。 数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。 目的地址 源地址 数 据

  30. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV A,Rn 11101rrr ARn n=0~7, rrr=000~111 1 MOV A,direct 11100101 direct A (direct) 1 MOV A,@Ri 1110011i A (Ri) i=0,1 1 MOV A,#data 01110100 data A #data 1 1. 内部8位数据传送指令(15条) 内部8位数据传送指令共15条,主要用于MCS-51单片机内部RAM与寄存器之间的数据传送。指令基本格式: MOV <目的操作数>,<源操作数> 1) 以累加器A为目的地址的传送指令(4条)

  31. 累加器A 40H 寄存器R0 50H 内部RAM:40H 30H 内部RAM:50H 10H 注意:以上传送指令的结果均影响程序状态字寄存器PSW的P标志。 例2.1已知相应单元的内容如下,请指出每条指令执行后相应单元内容的变化。

  32. (1) MOV A,#20H (2) MOV A,40H (3) MOV A,R0 (4) MOV A,@R0 解:(1) MOV A,#20H执行后A=20H。 (2) MOV A,40H执行后A=30H。 (3) MOV A,R0执行后A=50H。 (4) MOV A,@R0执行后A=10H。

  33. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV Rn,A 11111rrr Rn A n=0~7, rrr=000~111 1 MOV Rn,direct 10101rrr direct Rn (direct) n=0~7, rrr=000~111 1 MOV Rn,#data 01111rrr data Rn #data n=0~7, rrr=000~111 1 2) 以Rn为目的地址的传送指令(3条)

  34. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV direct,A 11111010 direct (direct) A 1 MOV direct,Rn 10001rrr direct (direct )Rn n=0~7, rrr=000~111 1 MOV direct2,direct1 10000101 direct1 direct2 (direct2)  direct1 2 MOV direct,@Ri 1000011i direct (direct )(Ri) i=0,1 2 MOV direct,#data 01110101 direct data (direct)#data 2 注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。 3) 以直接地址为目的地址的传送指令(5条)

  35. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV @Ri,A 1111011i (Ri)A i=0,1 1 MOV @Ri,direct 1110011i direct (Ri)(direct) 2 MOV @Ri,#data 0111010i data (Ri)#data 1 注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。 4) 以寄存器间接地址为目的地址的传送指令(3条)

  36. 寄存器R0 50H 寄存器R1 66H 寄存器R6 30H 内部RAM:50H 60H 内部RAM:66H 45H 内部RAM:70H 40H 注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。 例3.2已知相应单元的内容如下,请指出下列指令执行后各单元内容相应的变化。

  37. (1) MOV A,R6 (2) MOV R6,70H (3) MOV 70H,50H (4) MOV 40H,@R0 (5) MOV @R1,#88H 解:(1) MOV A,R6执行后A=30H。 (2) MOV R6,70H执行后R6=40H。 (3) MOV 70H,50H执行后(70H)=60H。 (4) MOV 40H,@R0执行后(40H)=60H。 (5) MOV @R1,#88H执行后(66H)=88H。

  38. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV DPTR,#data16 10010000 data15~8 data7~0 (DPTR)  #data16 把16位常数装入数据指针 2 2. 16位 数据传送指令(1条)

  39. 助记符格式 机器码(B) 相应操作 指令说明 机器 周期 MOVX A,@DPTR 11100000 A(DPTR) 把DPTR所对应的外部RAM地址中的内容传送给累加器A 2 MOVX A,@Ri 1110001i A (Ri) i=0,1 2 MOVX @DPTR,A 11110000 (DPTR) A 结果不影响P标志 2 MOVX @Ri,A 1110001i (Ri) A i=0,1,结果不影响P标志 2 • 注意:以上指令结果不影响程序状态字寄存器PSW标志。 • 3. 外部数据传送指令(4条)

  40. 注意:① 外部RAM只能通过累加器A进行数据传送。 ② 累加器A与外部RAM之间传送数据时只能间接寻址方式,间接寻址寄存器为DPTR,R0,R1。 ③ 以上传送指令结果通常影响程序状态字寄存器PSW的P标志。 例2.3把外部数据存储器2040H单元中的数据传送到外部数据存储器2560H单元中去。

  41. 解:MOV DPTR,#2040H MOVX A,@DPTR ;先将2040H单元的内容传送到累加器A中 MOV DPTR,#2560H MOVX @DPTR,A ;再将累加器A中的内容传送到2560H单元中

  42. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 XCH A,Rn 11001rrr ARn A与Rn内容互换 1 XCH A,direct 11000101 direct A(direct) 1 XCH A,@Ri 1100011i A(Ri) i=0,1 1 • 4. 交换和查表类指令(9条) • 1) 字节交换指令(3条)

  43. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 XCHD A,@Ri 1101011i A3~0(Ri)3~0 低4位交换,高4位不变 1 • 注意:以上指令结果影响程序状态字寄存器PSW的P标志。 • 2) 半字节交换指令(1条) 注意:上面指令结果影响程序状态字寄存器PSW的P标志。

  44. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 SWAP A 11000100 A 3~0A7~4 高、低4位互相交换 1 • 3) 累加器A中高4位和低4位交换(1条) 注意:上面指令结果不影响程序状态字寄存器PSW标志。 例2.4设内部数据存储区2AH、2BH单元中连续存放有4个BCD码(1个BCD码占 2AH 2BH 2AH 2BH

  45. 解:MOV R0,#2AH ;将立即数2AH传送到寄存器R0中 MOV A,@R0 ;将2AH单元的内容传送到累加器A中 SWAP A ;将累加器A中的高4位与 低4位交换 MOV @R0,A ;将累加器A的内容传送到2AH单元中 MOV R1,#2BH

  46. MOV A,@R1 ;将2BH单元的内容传送到累加器A中 SWAP A ;将累加器A中的高4位与低4位交换 XCH A,@R0 ;将累加器A中的内容与2AH单元的内容交换 MOV @R1,A ;累加器A的内容传送到2BH单元

  47. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOVC A,@A+PC 10000011 A(A+PC) A+PC所指外部程序存储单元的值送A 2 MOVC A,@A+DPTR 10010011 A(A+DPTR) A+DPTR所指外部程序存储单元的值送A 2 • 4) 查表指令(2条) 注意:① 以上指令结果影响程序状态字寄存器PSW的P标志。 ② 查表指令用于查找存放在程序存储器中的表格。

  48. 助记符格式 机器码(B) 相应操作 指令说明 机器周期 PUSH direct 11000000 direct SPSP+1 (SP)(direct) 将SP加1,然后将源地址单元中的数传送到SP所指示的单元中去 2 POP direct 11010000 direct (direct)(SP) SPSP-1 将SP所指示的单元中的数传送到direct地址单元中,然后SPSP-1 2 • 5) 堆栈操作指令(2条) 注意:① 堆栈是用户自己设定的内部RAM中的一块专用存储区,使用时一定先设堆栈指针,堆栈指针缺省为SP=07H。

  49. ② 堆栈遵循后进先出的原则安排数据。 ③ 堆栈操作必须是字节操作,且只能直接寻址。将累加器A入栈、出栈指令可以写成: PUSH/POP ACC 或 PUSH/POP 0E0H 而不能写成: PUSH/POP A ④ 堆栈通常用于临时保护数据及子程序调用时保护现场和恢复现场。 ⑤ 以上指令结果不影响程序状态字寄存器PSW标志。

  50. 例2.5设堆栈指针为30H,把累加器A和DPTR中的内容压入,然后根据需要再把它们弹出,编写实现该功能的程序段。例2.5设堆栈指针为30H,把累加器A和DPTR中的内容压入,然后根据需要再把它们弹出,编写实现该功能的程序段。 解:MOV SP,#30H ;设置堆栈指针,SP=30H为栈底地址 PUSH ACC ;SP+1→SP,SP=31H,ACC →(SP) PUSH DPH ;SP+1→SP,SP=32H,DPH →(SP)

More Related