1、第第2 2章章 MCS-51MCS-51单片机指令系统单片机指令系统与汇编语言程序设计与汇编语言程序设计主要内容:主要内容:MCS-51MCS-51单片机指令系统的寻址方式、指令系单片机指令系统的寻址方式、指令系统、基本程序结构及汇编语言的开发和调试。统、基本程序结构及汇编语言的开发和调试。重点重点在于寻址方式、各种指令的应用、程序设在于寻址方式、各种指令的应用、程序设计的规范、程序设计的思想及典型程序的理解和掌计的规范、程序设计的思想及典型程序的理解和掌握。握。难点难点在于控制转移、位操作指令的理解及各种在于控制转移、位操作指令的理解及各种指令的灵活应用,以及程序设计的基本方法和针对指令的灵
2、活应用,以及程序设计的基本方法和针对具体的硬件设计出最合理的软件。具体的硬件设计出最合理的软件。docin/sundae_meng 指令系统:指令系统:一台计算机所能识别、执行的指令的集合就是它的指令系统。一台计算机所能识别、执行的指令的集合就是它的指令系统。机器语言:机器语言:指令系统是一套控制计算机执行操作的二进制编码,称为机指令系统是一套控制计算机执行操作的二进制编码,称为机器语言。机器语言指令是计算机惟一能识别和执行的指令。器语言。机器语言指令是计算机惟一能识别和执行的指令。汇编语言:汇编语言:指令系统是利用指令助记符来描述的,称为汇编语言。指令系统是利用指令助记符来描述的,称为汇编语
3、言。计算机的指令系统一般都是利用汇编语言描述的,是由计算机的指令系统一般都是利用汇编语言描述的,是由计算机硬件设计所决定的。指令系统没有通用性。计算机硬件设计所决定的。指令系统没有通用性。单片机一般是空机,未含任何系统软件。因此在第一次单片机一般是空机,未含任何系统软件。因此在第一次使用前,必须对其进行编程,使用前,必须对其进行编程,2.1 2.1 概述概述 docin/sundae_meng2.1.1 2.1.1 汇编语言指令格式与伪指令汇编语言指令格式与伪指令 1 1常用单位与术语常用单位与术语 位位(bitbit):):位是计算机所能表示的最小的、最基本的数据单位是计算机所能表示的最小的
4、、最基本的数据单位,位通常是指一个二进制位。位,位通常是指一个二进制位。字节(字节(ByteByte):):一个连续的一个连续的8位二进制数码称为一个字节,即位二进制数码称为一个字节,即1Byte=8bit。字(字(W o r dW o r d):):通 常 由通 常 由 1 6 位 二 进 制 数 码 组 成,即位 二 进 制 数 码 组 成,即1Word=2Byte。字长:字长:字长是指计算机一次处理二进制数码位的多少。字长是指计算机一次处理二进制数码位的多少。MCS-51型单片机是型单片机是8位机,所以说它的字长为位机,所以说它的字长为8位。位。MCS-51系列单片机都是以系列单片机都是
5、以Intel公司最早的典型产品公司最早的典型产品8051为核心,增加了一定的功能部件后构成的。本章以为核心,增加了一定的功能部件后构成的。本章以8051为主介绍为主介绍MCS-51系列单片机系列单片机。docin/sundae_meng2 2汇编语言指令格式汇编语言指令格式 指令格式:指令格式:指令的表示方式称为指令格式,它规定了指令的长度和内部指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。信息的安排。完整的指令格式如下:完整的指令格式如下:标号标号:操作码操作码 操作数操作数,操作数操作数;注释注释 其中:其中:项是可选项。项是可选项。标号:标号:指本条指令起始地址的符号,
6、也称为指令的符号地址。代表该条指指本条指令起始地址的符号,也称为指令的符号地址。代表该条指令在程序编译时的具体地址。令在程序编译时的具体地址。操作码:操作码:又称助记符,它是由对应的英文缩写构成的,是指令语句的关又称助记符,它是由对应的英文缩写构成的,是指令语句的关键。它规定了指令具体的操作功能,描述指令的操作性质,是一条指令中键。它规定了指令具体的操作功能,描述指令的操作性质,是一条指令中不可缺少的内容。不可缺少的内容。操作数:操作数:它既可以是一个具体的数据,也可以是存放数据的地址。它既可以是一个具体的数据,也可以是存放数据的地址。注释:注释:注释也是指令语句的可选项,它是为增加程序的可读
7、性而设置的,注释也是指令语句的可选项,它是为增加程序的可读性而设置的,是针对某指令而添加的说明性文字,不产生可执行的目标代码。是针对某指令而添加的说明性文字,不产生可执行的目标代码。docin/sundae_meng 伪指令(也称为汇编程序的控制命令)是程序员发给汇编伪指令(也称为汇编程序的控制命令)是程序员发给汇编程序的命令,用来设置符号值、保留和初始化存储空间、控制程序的命令,用来设置符号值、保留和初始化存储空间、控制用户程序代码的位置。用户程序代码的位置。伪指令只出现在汇编前的源程序中,仅提供汇编用的某些伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制信息,不产生可执行的目标代码,
8、是控制信息,不产生可执行的目标代码,是CPUCPU不能执行的指令。不能执行的指令。(1 1)定位伪指令)定位伪指令ORGORG 格式:格式:ORG nORG n 其中:其中:n n通常为绝对地址,可以是十六进制数、标号或表达式。通常为绝对地址,可以是十六进制数、标号或表达式。功能:功能:规定编译后的机器代码存放的起始位置。在一个汇编规定编译后的机器代码存放的起始位置。在一个汇编语言源程序中允许存在多条定位伪指令,但每一个语言源程序中允许存在多条定位伪指令,但每一个n n值都应和前值都应和前面生成的机器指令存放地址不重叠。面生成的机器指令存放地址不重叠。例如程序:例如程序:ORG1000H ST
9、ART:MOVA,#20H MOVB,#30H 3伪指令伪指令 docin/sundae_meng(2 2)结束汇编伪指令)结束汇编伪指令ENDEND 格式:格式:标号标号:END 表达式表达式 功能:功能:放在汇编语言源程序的末尾,表明源程序的汇编到此放在汇编语言源程序的末尾,表明源程序的汇编到此结束,其后的任何内容不予理睬。结束,其后的任何内容不予理睬。(3 3)赋值伪指令)赋值伪指令EQUEQU 格式:格式:字符名称字符名称x EQU 赋值项赋值项n 功能:功能:将赋值项将赋值项n的值赋予字符名称的值赋予字符名称x。程序中凡出现该字符名。程序中凡出现该字符名称称x就等同于该赋值项就等同于
10、该赋值项n,其值在整个程序中有效。赋值项,其值在整个程序中有效。赋值项n可以可以是常数、地址、标号或表达式。在使用时,必须先赋值后使用。是常数、地址、标号或表达式。在使用时,必须先赋值后使用。“字符名称字符名称”与与“标号标号”的区别是的区别是“字符名称字符名称”后无冒号,后无冒号,而而“标号标号”后面有冒号。后面有冒号。docin/sundae_meng(4 4)定义字节伪指令)定义字节伪指令DBDB 格式:格式:标号标号:DB x1,x2,xn 功能:功能:将将8位数据(或位数据(或8位数据组)位数据组)x1,x2,xn顺序存放在从当顺序存放在从当前程序存储器地址开始的存储单元中。前程序存
11、储器地址开始的存储单元中。xi可以是可以是8位数据、位数据、ASCII码、表达式,也可以是括在单引号内的字符串。两个数据之间用码、表达式,也可以是括在单引号内的字符串。两个数据之间用逗号逗号“,”分隔。分隔。xi为数值常数时,取值范围为为数值常数时,取值范围为00HFFH。xi为为ASCII码时,码时,要使用单引号要使用单引号,以示区别。,以示区别。xi为字符串常数时,其长度不应为字符串常数时,其长度不应超过超过80个字符。个字符。(5 5)定义双字节伪指令)定义双字节伪指令DWDW 格式:格式:标号标号:DW x1,x2,xn 功能:功能:将双字节数据将双字节数据或双字节数据组或双字节数据组
12、顺序存放在从标号指定顺序存放在从标号指定地址单元开始的存储单元中。其中,地址单元开始的存储单元中。其中,xi为为16位数值常数,占两个位数值常数,占两个存储单元,先存高存储单元,先存高8位(存入低位地址单元中),后存低位(存入低位地址单元中),后存低8位(存位(存入高位地址单元中)。入高位地址单元中)。docin/sundae_meng (6 6)预留存储空间伪指令)预留存储空间伪指令DS DS 格式:格式:标号标号:DS n 功能:功能:从标号指定地址单元开始,预留从标号指定地址单元开始,预留n个存储单元,汇编时不对这些存个存储单元,汇编时不对这些存储单元赋值。储单元赋值。n可以是数据,也可
13、以是表达式。可以是数据,也可以是表达式。P39P39例例 (7 7)定义位地址符号伪指令)定义位地址符号伪指令BITBIT 格式:格式:字符名称字符名称x BIT 位地址位地址n 功能:功能:将位地址将位地址n的值赋予字符名称的值赋予字符名称x。程序中凡出现该字符名称。程序中凡出现该字符名称x就代就代表该位地址。位地址表该位地址。位地址n可以是绝对地址,也可以是符号地址。可以是绝对地址,也可以是符号地址。(8 8)数据地址赋值伪指令)数据地址赋值伪指令DATADATA 格式:格式:字符名称字符名称x DATA 表达式表达式n 功能:功能:把表达式把表达式n的值赋值给左边的字符名称的值赋值给左边
14、的字符名称x。n可以是数据或地址,可以是数据或地址,也可以是包含所定义的也可以是包含所定义的“字符名称字符名称x”在内的表达式,但不能是汇编符号。在内的表达式,但不能是汇编符号。DATA与与EQU的主要区别是:的主要区别是:EQU定义的定义的“字符名称字符名称”必须先定义必须先定义后使用,而后使用,而DATA定义的定义的“字符名称字符名称”没有这种限制。所以,没有这种限制。所以,DATA伪指令伪指令通常用在源程序的开头或末尾。通常用在源程序的开头或末尾。docin/sundae_meng2.1.2 指令的分类指令的分类 MCS-51MCS-51指令系统有指令系统有111111条指令,可按下列几
15、种方式分类:条指令,可按下列几种方式分类:n按指令字节数分类按指令字节数分类 单字节指令(单字节指令(4949条)、双字节指令(条)、双字节指令(4646条)和三字节条)和三字节指令(指令(1616条)。条)。2.2.按指令执行时间分类按指令执行时间分类 单机器周期指令(单机器周期指令(6565条)、双机器周期指令(条)、双机器周期指令(4444条)条)和四机器周期指令(和四机器周期指令(2 2条)。条)。3.3.按功能分类按功能分类 数据传送指令(数据传送指令(2929条)、算术操作指令(条)、算术操作指令(2424条)、逻条)、逻辑操作指令(辑操作指令(2424条)、控制转移指令(条)、控
16、制转移指令(1717条)和位操作指条)和位操作指令(令(1717条)。条)。docin/sundae_meng2.1.3 指令中的常用符号指令中的常用符号 Rn(n=07):):表示当前工作寄存器表示当前工作寄存器R0R7中的任一个中的任一个寄存器。寄存器。Ri(i=0或或1):):表示通用寄存器组中用于间接寻址的两个寄表示通用寄存器组中用于间接寻址的两个寄存器存器R0,R1。#data:表示表示8位直接参与操作的立即数。位直接参与操作的立即数。#data16:表示表示16位直接参与操作的立即数。位直接参与操作的立即数。direct:表示片内表示片内RAM的的8位单元地址。位单元地址。addr
17、11:表示表示11位目的地址,主要用于位目的地址,主要用于ACALL和和AJMP指指令中。令中。addr16:表示表示16位目的地址,主要用于位目的地址,主要用于LCALL和和LJMP指指令中。令中。rel:用补码形式表示的:用补码形式表示的8位二进制地址偏移量,取值范围为位二进制地址偏移量,取值范围为 128+127,主要用于相对转移指令,以形成转移的目的,主要用于相对转移指令,以形成转移的目的地址。地址。DPTR:数据指针,用于寄存器间接寻址方式和变址寻址方式数据指针,用于寄存器间接寻址方式和变址寻址方式。docin/sundae_meng2.1.3 指令中的常用符号指令中的常用符号 bi
18、t:表示片内表示片内RAM的位寻址区,或者是可以位寻址的的位寻址区,或者是可以位寻址的SFR的位地址。的位地址。A(或(或ACC)、)、B:表示累加器、表示累加器、B寄存器。寄存器。C:表示表示PSW中的进位标志位中的进位标志位Cy。:在间接寻址方式中,表示间接寻址寄存器指针的前缀标志。在间接寻址方式中,表示间接寻址寄存器指针的前缀标志。$:表示当前的指令地址。表示当前的指令地址。/:在位操作指令中,表示对该位先求反后再参与操作。在位操作指令中,表示对该位先求反后再参与操作。(X):):表示由表示由X所指定的某寄存器或某单元中的内容。所指定的某寄存器或某单元中的内容。(X):表示由表示由X间接
19、寻址单元中的内容。间接寻址单元中的内容。:表示指令的操作结果是将箭头右边的内容传送到左边。表示指令的操作结果是将箭头右边的内容传送到左边。:表示指令的操作结果是将箭头左边的内容传送到右边。表示指令的操作结果是将箭头左边的内容传送到右边。、:表示逻辑或、与、异表示逻辑或、与、异或。或。docin/sundae_meng 寻址方式:寻址方式:在计算机中,说明操作数所在地址的方法称为指令在计算机中,说明操作数所在地址的方法称为指令的寻址方式。的寻址方式。计算机执行程序实际上是在不断寻找操作数并进行操作的计算机执行程序实际上是在不断寻找操作数并进行操作的过程。过程。每种计算机在设计时已决定了它具有哪些
20、寻址方式,寻址每种计算机在设计时已决定了它具有哪些寻址方式,寻址方式越多,计算机的灵活性越强,指令系统也就越复杂。方式越多,计算机的灵活性越强,指令系统也就越复杂。MCS-51MCS-51单片机的指令系统提供了单片机的指令系统提供了7 7种寻址方式,分别为立种寻址方式,分别为立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。一条指令可能含多种寻址方式。相对寻址和位寻址。一条指令可能含多种寻址方式。2.2 MCS-512.2 MCS-51单片机的寻址方式单片机的寻址方式 docin/sundae_meng2.2.1
21、 2.2.1 立即寻址立即寻址 定义:定义:将立即参与操作的数据直接写在指令中,这种寻址方将立即参与操作的数据直接写在指令中,这种寻址方式称为立即寻址。式称为立即寻址。特点:特点:指令中直接含有所需的操作数。该操作数可以是指令中直接含有所需的操作数。该操作数可以是8位位的,也可以是的,也可以是16位的,常常处在指令的第二字节和第三字节位的,常常处在指令的第二字节和第三字节的位置上。立即数通常使用的位置上。立即数通常使用#data或或#data16表示,在立表示,在立即数前面加即数前面加“#”标志,用以和直接寻址中的直接地址标志,用以和直接寻址中的直接地址(direc或或bit)相区别)相区别。
22、P41P41例例 2.2.2 2.2.2 直接寻址直接寻址 定义:定义:将操作数的地址直接存放在指令中,这种寻址方式称为将操作数的地址直接存放在指令中,这种寻址方式称为直接寻址。直接寻址。特点:特点:指令中含有操作数的地址。该地址指出了参与操作的数指令中含有操作数的地址。该地址指出了参与操作的数据所在的字节单元地址或位地址。计算机执行它们时便可根据据所在的字节单元地址或位地址。计算机执行它们时便可根据直接地址找到所需要的操作数。直接地址找到所需要的操作数。寻址范围:寻址范围:ROM、片内、片内RAM区、区、SFR和位地址空间。和位地址空间。P42 docin/sundae_meng2.2.3
23、寄存器寻址寄存器寻址定义:定义:操作数存放在操作数存放在MCS-51内部的某个工作寄存器内部的某个工作寄存器Rn(R0R7)或部分专用寄存器中,这种寻址方式称)或部分专用寄存器中,这种寻址方式称为寄存器寻址。为寄存器寻址。特点:特点:由指令指出某一个寄存器的内容作为操作数。由指令指出某一个寄存器的内容作为操作数。存放操作数的寄存器在指令代码中不占据单独的一个存放操作数的寄存器在指令代码中不占据单独的一个字节,而是嵌入(隐含)到操作码字节中。字节,而是嵌入(隐含)到操作码字节中。寻址范围:寻址范围:四组通用寄存器四组通用寄存器Rn(R0R7)、部分专用)、部分专用寄存器(寄存器(A,B,DPTR
24、,Cy)。)。docin/sundae_meng 2.2.4 寄存器间接寻址寄存器间接寻址 定义:定义:指令给出的寄存器中存放的是操作数据的单元地指令给出的寄存器中存放的是操作数据的单元地址。这种寻址方式称为寄存器间接寻址,简称为寄存器址。这种寻址方式称为寄存器间接寻址,简称为寄存器间址。间址。特点:特点:指令给出的寄存器中存放的是操作数地址。寄存指令给出的寄存器中存放的是操作数地址。寄存器间接寻址是一种二次寻找操作数地址的寻址方式,寄器间接寻址是一种二次寻找操作数地址的寻址方式,寄存器前边必须加前缀符号存器前边必须加前缀符号“”。不能用于寻址特殊功能。不能用于寻址特殊功能寄存器寄存器SFR。
25、寻址范围:寻址范围:内部内部RAM低低128B(只能使用(只能使用R0或或R1作作间址寄存器)、外部间址寄存器)、外部RAM(只能使用(只能使用DPTR作间址寄作间址寄存器)。对于外部低存器)。对于外部低256单元单元RAM的访问,除可以使的访问,除可以使用用DPTR外,还可以使用外,还可以使用R0或或R1作间址寄存器。作间址寄存器。docin/sundae_meng 2.2.5 变址寻址变址寻址 定义:定义:操作数存放在变址寄存器(累加器操作数存放在变址寄存器(累加器A)和基址寄存器)和基址寄存器(DPTR或或PC)相加形成的)相加形成的16位地址单元中。这种寻址方式位地址单元中。这种寻址方
26、式称为基址加变址寄存器间接寻址,简称为变址称为基址加变址寄存器间接寻址,简称为变址寻址。寻址。特点:特点:指令操作码中隐含作为基址寄存器用的指令操作码中隐含作为基址寄存器用的DPTR(或(或PC)和作为变址用的累加器和作为变址用的累加器A。在执行变址寻址指令时,。在执行变址寻址指令时,MCS-51单片机先把基地址(单片机先把基地址(DPTR或或PC 的内容)和地址偏移量(的内容)和地址偏移量(A的内容)相加,以形成操作数地址,再由操作数地址找到操作的内容)相加,以形成操作数地址,再由操作数地址找到操作数,并完成相应的操作。变址寻址方式是单字节指令。数,并完成相应的操作。变址寻址方式是单字节指令
27、。寻址范围:寻址范围:只能对程序存储器只能对程序存储器ROM进行寻址,主要用于查表性进行寻址,主要用于查表性质的访问。质的访问。;(PC)(A)+(DPTR)docin/sundae_meng注意:注意:累加器累加器A中存放的操作数地址相对基地址的偏移中存放的操作数地址相对基地址的偏移量的范围为量的范围为00HFFH(无符号数)。(无符号数)。MCS-51单片机共有以下三条变址寻址指令:单片机共有以下三条变址寻址指令:MOVC A,A+PC ;(A)(A)+(PC)+1 MOVC A,A+DPTR ;(A)(A)+(DPTR)JMP A+DPTR ;(PC)(A)+(DPTR)docin/su
28、ndae_meng2.2.6 相对寻址相对寻址定义:定义:将程序计数器将程序计数器PC的当前值(取出本条指令后的的当前值(取出本条指令后的PC值)与值)与指令第二个字节给出的偏移量(指令第二个字节给出的偏移量(rel)相加,形成新的转移目标)相加,形成新的转移目标地址。称为相对寻址方式。地址。称为相对寻址方式。特点:特点:相对寻址方式是为实现程序的相对转移而设计的,为相相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所使用,其指令码中含有相对地址偏移量,能生成对转移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码。浮动代码。如:如:SJMP rel ;(PC)(PC)+2+r
29、el相对转移指令的目的地址指令地址指令字节数偏移量相对转移指令的目的地址指令地址指令字节数偏移量寻址范围:寻址范围:只能对程序存储器只能对程序存储器ROM进行寻址。相对地址偏移量进行寻址。相对地址偏移量(rel)是一个带符号的)是一个带符号的8位二进制补码,其取值范围为位二进制补码,其取值范围为 128127(以(以PC为中间的为中间的256个字节范围)。个字节范围)。docin/sundae_meng2.2.7 位寻址位寻址定义:定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址指令中给出的操作数是一个可单独寻址的位地址,这种寻址方式称为位寻址方式。方式称为位寻址方式。特点:特点:位
30、寻址是直接寻址方式的一种,其特点是对位寻址是直接寻址方式的一种,其特点是对8位二进制数中位二进制数中的某一位的地址进行操作。的某一位的地址进行操作。寻址范围:寻址范围:片内片内RAM低低128B中位寻址区、部分中位寻址区、部分SFR(其中有(其中有83位位可以位寻址)。可以位寻址)。可位寻址的位地址的表示形式如下:可位寻址的位地址的表示形式如下:(1 1)直接使用位地址形式。如:)直接使用位地址形式。如:MOV 00H,C ;(00H)(Cy)其中:其中:00H是片内是片内RAM中中20H地址单元的第地址单元的第0位。位。docin/sundae_meng(2)字节地址加位序号的形式。)字节地
31、址加位序号的形式。如:如:MOV 20H.0,C ;(20H.0)(Cy)其中:其中:20H.0是片内是片内RAM中中20H地址单元的第地址单元的第0位。位。(3)位的符号地址(位名称)的形式。)位的符号地址(位名称)的形式。对于部分特殊功能寄存对于部分特殊功能寄存器,其各位均有一个特定的名字,所以可以用它们的位名称来器,其各位均有一个特定的名字,所以可以用它们的位名称来访问该位。如:访问该位。如:ANL C,P ;(C)(C)(P)其中:其中:P是是PSW的第的第0位,位,C是是PSW的第的第7位。位。(4)字节符号地址(字节名称)加位序号的形式。)字节符号地址(字节名称)加位序号的形式。对
32、于部分特对于部分特殊功能寄存器(如状态标志寄存器殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名),还可以用其字节名称加位序号形式来访问某一位。如:称加位序号形式来访问某一位。如:CPL PSW.6 ;(AC)(AC)其中:其中:PSW.6表示该位是表示该位是PSW的第的第6位。位。ACdocin/sundae_meng例题例题1 指出下列指令的寻址方式指出下列指令的寻址方式 MOV A,R1 ;(A)(R1)寄存器寻址寄存器寻址 ADD A,#05H ;(A)(A)+立即数立即数 05H 立即寻址立即寻址 MOV A,R1 ;(A)(R1)寄存器间接寻址寄存器间接寻址 MOV 30H
33、,4AH ;(30H)(4AH)直接寻址直接寻址 MOVC A,A+DPTR ;(A)(A)+(DPTR)变址寻址变址寻址 SJMP LP ;(PC)(PC)+2+偏移量偏移量 相对寻址相对寻址 MOV 65H,C ;(65H)(Cy)位寻址位寻址docin/sundae_meng2.3 MCS-512.3 MCS-51单片机的指令系统单片机的指令系统 MCS-51指令系统使用指令系统使用44种助记符,它们代表着种助记符,它们代表着33种功能,可以实现种功能,可以实现51种操作。指令助记符与操作数的各种可种操作。指令助记符与操作数的各种可能的寻址方式的结合一共可构造出能的寻址方式的结合一共可构
34、造出111条指令。条指令。MCS-51单片机指令系统按其功能可分为单片机指令系统按其功能可分为数据传送类数据传送类指令、算术运算类指令、逻辑运算和移位类指令、控制转移指令、算术运算类指令、逻辑运算和移位类指令、控制转移类指令和位操作类指令类指令和位操作类指令五大类。五大类。docin/sundae_meng学习指令系统时,应注意:学习指令系统时,应注意:(1)指令的格式、功能)指令的格式、功能。(2)操作码的含义,操作数的表示方法。)操作码的含义,操作数的表示方法。(3)寻址方式,源、目的操作数的范围。)寻址方式,源、目的操作数的范围。(4)对标志位的影响。)对标志位的影响。(5)指令的适用范
35、围。)指令的适用范围。(6)正确估算指令的字节数。)正确估算指令的字节数。一般地,操作码占一般地,操作码占1字节;操作数中,直接地址字节;操作数中,直接地址derict占占1字字节,节,#data占占1字节,字节,#data16占两字节;操作数中的占两字节;操作数中的A、B、R0R7、Ri、DPTR、A+DPTR、A+PC等均隐含在操作码等均隐含在操作码中。中。docin/sundae_meng2.3.1 数据传送指令数据传送指令 CPU在进行算术和逻辑操作时,绝大多数指令都有操作数,在进行算术和逻辑操作时,绝大多数指令都有操作数,所以数据传送是一种最基本、最主要的操作。所以数据传送是一种最基
36、本、最主要的操作。数据传送指令共数据传送指令共29条,可分为内部条,可分为内部RAM数据传送、外部数据传送、外部RAM数据传送、程序存储器数据传送、数据交换和堆栈操作等数据传送、程序存储器数据传送、数据交换和堆栈操作等五类。五类。寻址范围:寻址范围:累加器累加器A、片内、片内RAM、SFR、片外、片外RAM。功能:功能:(目的地址)(目的地址)(源地址)。(源地址)。可表示为可表示为:;源地址单元的内容不变。源地址单元的内容不变。对标志位的影响:对标志位的影响:除以累加器除以累加器A为目的操作数的数据传送指令为目的操作数的数据传送指令对对P标志位有影响外,其余均不影响标志位。标志位有影响外,其
37、余均不影响标志位。docin/sundae_meng1内部内部RAM数据传送指令(数据传送指令(16条)条)格式:格式:MOV ,其中:其中:表示目的操作数,表示目的操作数,表示源操表示源操作数。作数。范围:范围:源、目的操作数均在片内源、目的操作数均在片内RAM、SFR中。中。指令形式:指令形式:按目的操作数可将内部数据传送指令分为以下几类。按目的操作数可将内部数据传送指令分为以下几类。(1)以累加器)以累加器A为目的操作数(为目的操作数(4条)条)MOV A,其中:其中:包括包括Rn、Ri、direct、#data。(各个符号的意义见(各个符号的意义见2.1.3节指令中的常用符号节指令中的
38、常用符号,以下同),以下同)只影响只影响PSW中的中的P标志位,不影响其他标志位。标志位,不影响其他标志位。(2)以工作寄存器)以工作寄存器Rn为目的操作数为目的操作数(3条)条)MOV Rn,其中:其中:包括包括A、direct、#data。docin/sundae_meng(3 3)以直接地址单元为目的操作数)以直接地址单元为目的操作数(5 5条)条)MOV direct,其中:其中:包括包括A、Rn、Ri、direct、#data。(4 4)以间址寄存器)以间址寄存器RiRi为目的操作数为目的操作数(3 3条)条)MOV Ri ,其中:其中:包括包括A、direct、#data。(5 5
39、)1616位数据传送指令位数据传送指令(1 1条)条)MOV DPTR,#data16注:注:(2)、()、(3)、()、(4)、)、(5)均不影响标志位。)均不影响标志位。内部数据传送指令的传内部数据传送指令的传送关系如右图所示。送关系如右图所示。docin/sundae_meng2 2外部外部RAMRAM数据传送指令(数据传送指令(4 4条)条)CPU与外部数据存储器之间进行数据传送时,必须使用外与外部数据存储器之间进行数据传送时,必须使用外部传送指令,只能通过累加器部传送指令,只能通过累加器A,采用寄存器间接寻址(用,采用寄存器间接寻址(用R0,R1和和DPTR三个间接寻址的寄存器)方式
40、完成。三个间接寻址的寄存器)方式完成。指令格式:指令格式:MOVX A,MOVX ,A 其中:其中:、包括包括DPTR、Ri。Ri(R0,R1)只能访问片外)只能访问片外RAM的低的低256个单元;个单元;DPTR可以访问片可以访问片外外RAM的全部的全部64KB的空间。的空间。对标志位的影响:对标志位的影响:MOVX A,指令只影响指令只影响PSW中中的的P标志位,不影响其他标志位;标志位,不影响其他标志位;MOVX ,A指令不影响标志位。指令不影响标志位。docin/sundae_meng3 3程序存储器(程序存储器(ROMROM)数据传送指令(查表指令)()数据传送指令(查表指令)(2
41、2条)条)P52P52 程序存储器的数据传送是单向的,并且只能读到累加器程序存储器的数据传送是单向的,并且只能读到累加器A A中。中。这类指令专门用于查表,又称为查表指令。这类指令专门用于查表,又称为查表指令。指令格式:指令格式:MOVC A,A+DPTR ;(A)(A)+(DPTR)MOVC A,A+PC ;(PC)(PC)+1 (A)(A)+(PC)两条指令的异同:两条指令的异同:其功能完全相同,但使用中存在着差异。其功能完全相同,但使用中存在着差异。(1 1)查表的位置要求不同)查表的位置要求不同 采用采用DPTR作为基地址寄存器,表可以放在作为基地址寄存器,表可以放在64KB程序存储程
42、序存储器空间的任何地址,使用方便,故称为远程查表。器空间的任何地址,使用方便,故称为远程查表。采用采用PC作为基地址寄存器,具体的表在程序存储器中只能作为基地址寄存器,具体的表在程序存储器中只能在查表指令后的在查表指令后的256B的地址空间中,使用有限制,故称为近程的地址空间中,使用有限制,故称为近程查表。查表。docin/sundae_meng(2 2)偏移量的计算方法不同)偏移量的计算方法不同 采用采用DPTR作为基地址寄存器,查表地址为作为基地址寄存器,查表地址为 (A)+(DPTR)。)。采用采用PC作为基地址寄存器,查表地址为作为基地址寄存器,查表地址为 (A)+(PC)+1。因此偏
43、移量的计算方法不同。因此偏移量的计算方法不同。采用采用DPTR作为基地址寄存器,作为基地址寄存器,A为欲查数值距离表首地为欲查数值距离表首地址的值;采用址的值;采用PC作为基地址寄存器,作为基地址寄存器,A的值必须预先设置为:的值必须预先设置为:A的值的值=表首地址当前指令的表首地址当前指令的PC值值14 4数据交换指令(数据交换指令(5 5条)条)(1 1)半字节数据交换指令()半字节数据交换指令(2 2条)条)指令格式:指令格式:SWAP A ;(A)30(A)74 XCHD A,Ri ;(A)30((Ri))30 docin/sundae_meng(2)字节交换指令()字节交换指令(3条
44、)条)指令格式:指令格式:XCH A,;包括包括Rn、Ri、direct。5堆栈操作指令(堆栈操作指令(2条)条)堆栈:按照堆栈:按照“先进后出先进后出”原则,进、出数据的存储区域。原则,进、出数据的存储区域。栈顶:刚入栈的数据构成栈顶,数据的进出在栈顶进行。栈顶:刚入栈的数据构成栈顶,数据的进出在栈顶进行。指令格式:指令格式:PUSH direct ;SP(SP)+1,(SP)(direct)POP direct ;(direct)(SP),SP(SP)1特点:特点:堆栈操作指令是一种特殊的数据传送指令,是根据栈指针堆栈操作指令是一种特殊的数据传送指令,是根据栈指针SP中的栈顶地址进行数据操
45、作。堆栈操作指令的实质是以栈指针中的栈顶地址进行数据操作。堆栈操作指令的实质是以栈指针SP为间址寄存器的间址寻址方式。为间址寄存器的间址寻址方式。堆栈区应避开使用的工作寄存堆栈区应避开使用的工作寄存器区和其他需要使用的数据区,系统复位后,器区和其他需要使用的数据区,系统复位后,SPSP的初始值为的初始值为07H07H。为了避免重叠,一般初始化时要重新设置为了避免重叠,一般初始化时要重新设置SPSP。docin/sundae_meng功能:功能:实现实现RAM单元数据送入栈顶或由栈顶取出数据送单元数据送入栈顶或由栈顶取出数据送至至RAM单元。单元。适用场合:适用场合:用于执行中断、子程序调用、参
46、数传递等程用于执行中断、子程序调用、参数传递等程序的断点保护和现场保护。序的断点保护和现场保护。书写方式:书写方式:堆栈操作指令是直接寻址指令,直接地址不堆栈操作指令是直接寻址指令,直接地址不能是寄存器名,因此应注意指令的书写格式。例如:能是寄存器名,因此应注意指令的书写格式。例如:PUSH ACC(不能写成(不能写成PUSH A)POP 00H (不能写成(不能写成POP R0)docin/sundae_meng数据传送指令小结n3种MOV指令:片内RAM数据传送 MOV片外RAM数据传送 MOVX程序存储器数据传送 MOVCn2种数据交换:半字节、字节n堆栈操作:入栈、出栈docin/su
47、ndae_meng2.3.2 2.3.2 算术运算指令算术运算指令 算术运算指令的两个参与运算的操作数,算术运算指令的两个参与运算的操作数,一个存放在累加一个存放在累加器器A中中(此操作数也为目的操作数);一个存放在(此操作数也为目的操作数);一个存放在R0R7或或Ri(片内(片内RAM)中,或是)中,或是#data(立即数)。(立即数)。算术运算指令可以分为加法指令、带进位的加法指令、带算术运算指令可以分为加法指令、带进位的加法指令、带借位的减法指令、十进制调整指令、加借位的减法指令、十进制调整指令、加1指令、减指令、减1指令、乘除指令、乘除指令。指令。1.加法指令加法指令(4条)条)指令格
48、式:指令格式:ADD A,;(A)(A)+其中:其中:包括包括Rn、Ri、direct、#data。对标志位的影响:对标志位的影响:ADD对对PSW中的所有标志位均产生影响。中的所有标志位均产生影响。docin/sundae_mengP54 例2.30分析执行如下程序段后,A、CY、AC、P、OV的结果。00110110MOV A,#36H +11101111ADD A,#0EFH 00100101A=25H CY=1,AC=1,P=1,OV=0溢出:运算结果超出了计算机所能表达数据的范围。如,8位二进制数表示有符号数的范围是-128-127。双高位判别溢出:将最高位产生的进位记为CS,次高位
49、产生的进位记为CP,OV=CS CP docin/sundae_meng2.带进位的加法指令(带进位的加法指令(4条)条)指令格式:指令格式:ADDC A,;(A)(A)+(Cy)其中:其中:包括包括Rn、Ri、direct、#data。对标志位的影响:对标志位的影响:ADDC对对PSW中的所有标志位均产生影响。中的所有标志位均产生影响。3.3.带借位的减法指令带借位的减法指令(4 4条)条)指令格式:指令格式:SUBB A,;(A)(A)(Cy)其中:其中:包括包括Rn、Ri、direct、#data。对标志位的影响:对标志位的影响:SUBB对对PSW中的所有标志位均产生影响。中的所有标志位
50、均产生影响。注意:注意:MCS-51指令系统中没有不带借位的减法指令,欲实现不指令系统中没有不带借位的减法指令,欲实现不带借位的减法计算,应预先置带借位的减法计算,应预先置Cy=0(利用(利用CLR C指令),然后指令),然后利用带借位的减法指令利用带借位的减法指令SUBB实现计算。实现计算。docin/sundae_meng4.十进制调整指令(十进制调整指令(1条)条)BCD码:4位二进制编码表示1位10进制数。十进制加法:25+8=33BCD码:00100101 +00001000 00101101不是(00110011)BCD原因:十进制运算,逢10进位,4位二进制运算,逢16进位。修正