1、 2022-7-2612022-7-262【基本知识点与要求【基本知识点与要求】(1)理解指令的寻址方式及相应的寻址空间。理解指令的寻址方式及相应的寻址空间。(2)正确理解正确理解51系列单片机的系列单片机的111条基本指令的含义,熟练掌条基本指令的含义,熟练掌 握其应用方法。握其应用方法。(3)了解机器语言、汇编语言和高级语言的特点,汇编语言程了解机器语言、汇编语言和高级语言的特点,汇编语言程序设计步骤。序设计步骤。(4)掌握汇编语言的基本格式,熟练掌握汇编语言程序设计思掌握汇编语言的基本格式,熟练掌握汇编语言程序设计思想和设计方法。想和设计方法。(5)理解子程序的特点,掌握子程序的设计方法
2、和设计中应注理解子程序的特点,掌握子程序的设计方法和设计中应注意的问题。意的问题。【重点与难点【重点与难点】重点是指令的寻址方式及相应的寻址空间、指令系统、子程序重点是指令的寻址方式及相应的寻址空间、指令系统、子程序设计、汇编语言程序设计思想和设计方法。难点是寄存器间接寻址、设计、汇编语言程序设计思想和设计方法。难点是寄存器间接寻址、相对寻址、变址寻址和位寻址,汇编语言程序设计思想和设计方法。相对寻址、变址寻址和位寻址,汇编语言程序设计思想和设计方法。2022-7-2633.1.1 513.1.1 51系列单片机指令分类系列单片机指令分类 指令指令:计算机能够识别和执行、用于控制各种功能部件完
3、成计算机能够识别和执行、用于控制各种功能部件完成某一特定动作的命令。某一特定动作的命令。指令系统指令系统:所有指令的集合构成了该类计算机的指令系统。所有指令的集合构成了该类计算机的指令系统。这里讲的是汇编语言指令这里讲的是汇编语言指令,即以英文名称或者缩写形式作为即以英文名称或者缩写形式作为助记符(帮助记忆的符号)。助记符(帮助记忆的符号)。5l5l系列单片机共有系列单片机共有111111条指令,可有下列三种分类。条指令,可有下列三种分类。1.1.按按指令功能指令功能可分成如下五类可分成如下五类(1 1)数据传送类指令数据传送类指令(2929条):内部条):内部8 8位数据传送指令位数据传送指
4、令1515条,内条,内部部1616位数据传送指令位数据传送指令1 1条,外部数据传送指令条,外部数据传送指令4 4条,交换和查表指条,交换和查表指令令9 9条。条。2022-7-264 (2 2)算术传送类指令(算术传送类指令(2424条):条):加法指令(包括加法指令(包括BCDBCD码调整指令码调整指令1 1条)条)1414条,减法指令条,减法指令8 8条,乘条,乘/除法指令各除法指令各1 1条。条。(3 3)逻辑运算类指令(逻辑运算类指令(2424条)条):逻辑运算指令:逻辑运算指令2020条,循环移位条,循环移位指令指令4 4条。条。(4 4)位操作类指令(位操作类指令(1717条):
5、条):位传送指令位传送指令2 2条,位置位、位清零条,位置位、位清零和位取反和位取反6 6条,位运算指令条,位运算指令4 4条,位转移指令条,位转移指令3 3条,判条,判CYCY标志指令标志指令2 2条。条。(5 5)控制转移类指令(控制转移类指令(1717条):条):无条件转移指令无条件转移指令4 4条,条件转移条,条件转移指令指令8 8条,调用和返回指令条,调用和返回指令5 5条。条。2.2.按按指令执行所需要的时间指令执行所需要的时间可分为以下三类可分为以下三类 (1 1)单周期指令()单周期指令(6464条)条)(2 2)双周期指令()双周期指令(4545条)条)(3 3)四周期指令(
6、)四周期指令(2 2条)条)2022-7-2653.3.按按指令所占的字节数指令所占的字节数可分为以下三类可分为以下三类 (1 1)单字节指令)单字节指令(49(49条条)(2 2)双字节指令)双字节指令(46(46条条)(3 3)三字节指令)三字节指令(16(16条条)3.1.2 3.1.2 指令格式指令格式 1.1.指令格式指令格式 标号:标号:操作码操作码 目的操作数目的操作数 ,源操作数,源操作数 ;注释;注释 (1 1)汇编语言语句由标号、操作码、操作数和注释汇编语言语句由标号、操作码、操作数和注释4 4部分组成。部分组成。其中,标号和注释部分可以没有,某些指令也可以没有操作数。其中
7、,标号和注释部分可以没有,某些指令也可以没有操作数。(2 2)标号标号位于语句的开始,由位于语句的开始,由1 18 8个个ASCIIASCII字符组成,第一个字符必字符组成,第一个字符必须是字母。标号不能使用系统中已经定义的助记符、伪指令及其它标号。须是字母。标号不能使用系统中已经定义的助记符、伪指令及其它标号。标号的后面必须加冒号,标号与冒号之间不能有空格,冒号与操作码之标号的后面必须加冒号,标号与冒号之间不能有空格,冒号与操作码之间可以有空格。间可以有空格。2022-7-266(3 3)操作码操作码是用英文缩写的指令功能助记符。它确定了本条指是用英文缩写的指令功能助记符。它确定了本条指令完
8、成什么样的操作功能,不能缺少。令完成什么样的操作功能,不能缺少。(4 4)操作数操作数在操作码之后,用空格分开。操作数是指参加操作在操作码之后,用空格分开。操作数是指参加操作的对象或者对象存放的地址,可以是数据,可以是地址,也可以的对象或者对象存放的地址,可以是数据,可以是地址,也可以没有。指令中有多个操作数时,操作数之间用逗号分开。没有。指令中有多个操作数时,操作数之间用逗号分开。源操作源操作数,目的操作数。数,目的操作数。(5 5)注释注释在语句的最后,以在语句的最后,以“;”开始,是说明性的文字,与开始,是说明性的文字,与语句的具体功能无关,但是能增加程序的可阅读性,便于程序的语句的具体
9、功能无关,但是能增加程序的可阅读性,便于程序的调试与交流。注释内容不参与程序的汇编。调试与交流。注释内容不参与程序的汇编。2 2.指令指令中数的表示中数的表示 十进制数以十进制数以D D结尾或者省略;十六进制以结尾或者省略;十六进制以H H结尾,如果数据以结尾,如果数据以A AF F开头,其前必须加数字开头,其前必须加数字0 0,如,如0FFH0FFH;字符串用;字符串用“”“”括起来。括起来。2022-7-2673.1.3 3.1.3 指令中常用缩写符号的意义指令中常用缩写符号的意义(1)#data:8位立即数。位立即数。(2)#data16:16位立即数。位立即数。(3)Rn:工作寄存器:
10、工作寄存器R0R7,其中其中n=07。(4)Ri:工作寄存器,:工作寄存器,i=0或或1。(5):间接地址符号。:间接地址符号。Ri,寄存器,寄存器Ri间接寻址。间接寻址。(6)direct:8位直接地址,可以是特殊功能寄存器位直接地址,可以是特殊功能寄存器SFR的地址的地址或内部数据存储器单元地址。或内部数据存储器单元地址。(7)addr11:11位目的地址。用于位目的地址。用于AJMP和和ACALL指令,均在指令,均在2KB地址范围内转移或调用。地址范围内转移或调用。(8)addr16:16位目的地址。用于位目的地址。用于LJMP和和LCALL指令,可在指令,可在64KB地址范围内转移或调
11、用。地址范围内转移或调用。2022-7-268(9)rel:有符号的:有符号的8位偏移地址,主要用于所有的条件转移指令位偏移地址,主要用于所有的条件转移指令和和SJMP指令。其范围是相对于下一条指令的第一字节地址,再指令。其范围是相对于下一条指令的第一字节地址,再偏移偏移-128+127字节。字节。(10)bit:位地址。片内:位地址。片内RAM的可寻址位和专用寄存器的的可寻址位和专用寄存器的可寻址可寻址位。位。(11)/:位操作数的前缀,表示对该位操作数取反,如位操作数的前缀,表示对该位操作数取反,如/bit。(12):当前指令存放的地址。):当前指令存放的地址。(13)()(X):表示由)
12、:表示由X所指定的某寄存器或某单元中的内容。所指定的某寄存器或某单元中的内容。(14)(X):表示由:表示由X间接寻址单元中的内容。间接寻址单元中的内容。(15)B:通用寄存器,常用于乘法:通用寄存器,常用于乘法MUL和除法和除法DIV指令。指令。(16)C:进位标志位或者布尔处理器中的累加器。:进位标志位或者布尔处理器中的累加器。(17):表示指令的操作结果是将箭头右边的内容传送到左边。:表示指令的操作结果是将箭头右边的内容传送到左边。2022-7-2693.2.1 立即寻址立即寻址 寻址方式寻址方式:一条指令的运行一条指令的运行需要寻找相应操作数或者从操作需要寻找相应操作数或者从操作数所在
13、地址寻找到本指令有关的操作数。数所在地址寻找到本指令有关的操作数。计算机指令系统中的操作数以不同的方式给出,其相应的寻计算机指令系统中的操作数以不同的方式给出,其相应的寻址方式也就有多种。址方式也就有多种。注意通常均以源操作数来介绍寻址方式的。注意通常均以源操作数来介绍寻址方式的。5151系列单片机的指令系统有系列单片机的指令系统有立即寻址,直接寻址,寄存器寻立即寻址,直接寻址,寄存器寻址,间接寻址,变址寻址,相对寻址,位寻址等七种寻址方式址,间接寻址,变址寻址,相对寻址,位寻址等七种寻址方式。立即寻址是指令中立即寻址是指令中直接给出操作数直接给出操作数的寻址方式。的寻址方式。立即操作数用立即
14、操作数用前面加有前面加有#号的号的8 8位或位或1616位数来表示位数来表示。立即数是指令代码的一部分,。立即数是指令代码的一部分,只能作源操作数只能作源操作数。该寻址方式用于对特殊功能寄存器和指定的存储单元赋初值。该寻址方式用于对特殊功能寄存器和指定的存储单元赋初值。2022-7-2610 例如:例如:MOV A,#60H ;(A)60H MOV DPTR,#3400H ;(;(DPTR)3400H MOV 30H,#40H ;(30H)单元)单元 40H 上述三条指令执行后,累加器上述三条指令执行后,累加器A中数据为立即数据中数据为立即数据60H,DPTR寄存器中数据为寄存器中数据为340
15、0H,30H单元中数据为立即数单元中数据为立即数40H。3.2.2 直接寻址直接寻址 直接寻址直接寻址:指令中直接给出操作数所在的:指令中直接给出操作数所在的存储单元的地址号存储单元的地址号的的寻址方式寻址方式。可以是操作数所在的字节地址或位地址,也可以直接使可以是操作数所在的字节地址或位地址,也可以直接使用由符号名称所表示的地址,即符号地址。用由符号名称所表示的地址,即符号地址。例如:例如:MOV A,40H;(A)(40H)该指令的功能是把内部数据存储器该指令的功能是把内部数据存储器RAM 40H单元的内容送到单元的内容送到累加器累加器A。指令直接给出了源操作数的地址。指令直接给出了源操作
16、数的地址40H。2022-7-26115151系列单片机中,直接寻址可访问三种地址空间为:系列单片机中,直接寻址可访问三种地址空间为:(1)(1)特殊功能寄存器特殊功能寄存器SFRSFR:直接寻址是唯一的访问形式;:直接寻址是唯一的访问形式;(2)(2)内部数据内部数据RAMRAM低低128128个字节单元(地址范围个字节单元(地址范围00H00H7FH7FH););(3)221(3)221个位地址空间个位地址空间。3.2.3 寄存器寻址寄存器寻址 寄存器寄存器寻址:寻址:就是操作数存放于寄存器中(就是操作数存放于寄存器中(Rn、ACC、B、DPTR、CY)的寻址方式。)的寻址方式。例如:例如
17、:MOV A,R7 ;(;(A)(R7)其功能是把寄存器其功能是把寄存器R7内的操作数传送到累加器内的操作数传送到累加器A中。由于操中。由于操作数在作数在R7中,因此在指令中指定了中,因此在指令中指定了R7,就能从中取得操作数,就能从中取得操作数。2022-7-26123.2.4 寄存器间接寻址寄存器间接寻址 寄存器间接寄存器间接寻址:寻址:由指令指出某个寄存器的内容作为操作数由指令指出某个寄存器的内容作为操作数地址的寻址方法地址的寻址方法,简称寄存器间址。简称寄存器间址。寄存器间接寻址使用所选定寄存器区中的寄存器间接寻址使用所选定寄存器区中的R0和和R1作为地址指作为地址指针针,来寻址片内数
18、据存储器来寻址片内数据存储器RAM(00FFH)的)的256个单元,个单元,但但它不能访问特殊功能寄存器它不能访问特殊功能寄存器SFR。寄存器间接寻址也适用于访问外部数据存储器,此时,用寄存器间接寻址也适用于访问外部数据存储器,此时,用R0、R1或或DPTR作为地址指针。作为地址指针。为了区别于寄存器寻址,为了区别于寄存器寻址,在寄存器间接寻址中的寄存器名前在寄存器间接寻址中的寄存器名前用间址符号用间址符号“”。例如:例如:MOV A,R0 ;(A)(R0)MOV A,R0 ;(A)(R0)2022-7-2613 第一条指令是寄存器寻第一条指令是寄存器寻址,址,R0R0中为操作数,指令码中为操
19、作数,指令码为为E8HE8H;指令执行后累加器指令执行后累加器A A中为中为30H30H,第二条指令是寄存器间第二条指令是寄存器间址,址,R0中为操作数地址,中为操作数地址,不是操作数,指令码为不是操作数,指令码为E6H。指令执行后累加器指令执行后累加器A中为操中为操作数作数20H。2022-7-2614 3.2.5 变址寻址变址寻址 变址寻址变址寻址:就是基址寄存器(就是基址寄存器(DPTRDPTR和和PCPC)与变址寄存器)与变址寄存器(A)(A)的的内容相加,作为操作数的地址。内容相加,作为操作数的地址。实现对程序存储器的访问。由于程序存储器通常是只读的,因实现对程序存储器的访问。由于程
20、序存储器通常是只读的,因此变址寻址只有读操作而无写操作,指令助记符采用此变址寻址只有读操作而无写操作,指令助记符采用MOVCMOVC。5l5l系列单片机的变址寻址指令有系列单片机的变址寻址指令有3 3条:条:MOVC A,A+DPTR ;(A)(A)+(DPTR)MOVC A,A+PC ;(A)(A)+(PC)JMP A+DPTR ;(PC)(A)+(DPTR)2022-7-2615 3.2.6 相对寻址相对寻址 相对寻址相对寻址:以以当前当前程序计数器程序计数器PCPC的内容为基础,加上指令的内容为基础,加上指令给出的给出的1 1个字节补码(偏移量)形成新的个字节补码(偏移量)形成新的PCP
21、C值的寻址方式。值的寻址方式。(1 1)当前当前PCPC值值是指相对转移指令所在地址(一般称为源地是指相对转移指令所在地址(一般称为源地址)加上转移指令字节数。即当前址)加上转移指令字节数。即当前PCPC值值=源地址源地址+转移指令字转移指令字节数节数,也就是相对转移指令的下一条指令所在的地址。也就是相对转移指令的下一条指令所在的地址。例如:例如:JZ rel JZ rel 是一条累加器是一条累加器A A为零就转移的双字节为零就转移的双字节指令。若该指令地址(源地址)为指令。若该指令地址(源地址)为2050H2050H,则执行该指令时的当,则执行该指令时的当前前PCPC值即为值即为2052H2
22、052H。2022-7-2616 (2 2)偏移量偏移量relrel是有符号的单字节数,是有符号的单字节数,以补码表示,其相对以补码表示,其相对值的范围是值的范围是-128-128+127+127,负数表示从当前地址向地址减小的方向,负数表示从当前地址向地址减小的方向转移,正数表示从当前地址向地址增大的方向转移。转移,正数表示从当前地址向地址增大的方向转移。所以,相对所以,相对转移指令满足条件后,转移的地址(一般称为目的地址)应为:转移指令满足条件后,转移的地址(一般称为目的地址)应为:目的地址目的地址=当前当前PCPC值值+rel=+rel=源地址源地址+转移指令字节数转移指令字节数+rel
23、+rel 例如:例如:若指令若指令JZ 08H JZ 08H 和和JZ 0F4H JZ 0F4H 存放在存放在2050H2050H开始的程开始的程序存储器单元。则累加器序存储器单元。则累加器A A为零的条件满足后,从源地址(为零的条件满足后,从源地址(2050H2050H)分别转移分别转移1010个单元。其相对寻址示意如图个单元。其相对寻址示意如图3-3(a)3-3(a)、(b)(b)所示。这两所示。这两条指令均为双字节指令,机器代码分别为:条指令均为双字节指令,机器代码分别为:60H60H、08H08H和和60H60H、F4HF4H。2022-7-2617(a)(a)指令指令JZ 08HJZ
24、 08H寻址示意图;寻址示意图;(b)(b)指令指令JZ 0F4HJZ 0F4H寻址示意图寻址示意图 图图3-3 3-3 相对寻址示意图相对寻址示意图2022-7-2618 3.2.7 位寻址位寻址 位寻址位寻址:即指令中直接给出位地址。即指令中直接给出位地址。5151系列单片机具有位寻址功能,可以对内部数据存储器系列单片机具有位寻址功能,可以对内部数据存储器RAMRAM中的位寻址区的中的位寻址区的128128位和部分特殊寄存器位和部分特殊寄存器SFRSFR中的相关位进行寻址,中的相关位进行寻址,并且位操作指令可对可寻址的每一位进行传送及逻辑操作。并且位操作指令可对可寻址的每一位进行传送及逻辑
25、操作。【注意【注意】位寻址只能对有位地址的单元作位寻址操作。位寻址其位寻址只能对有位地址的单元作位寻址操作。位寻址其实是一种直接寻址方式,不过其地址是位地址,只能用在位操作实是一种直接寻址方式,不过其地址是位地址,只能用在位操作指令之中。指令之中。例如:例如:SETB PSW.3 SETB PSW.3 ;(PSW.3)1(PSW.3)1 该指令的功能是将程序状态字该指令的功能是将程序状态字PSWPSW中的第中的第3 3位(位(RS0RS0)置)置1 1。2022-7-2619 5151系列单片机的位地址有如下系列单片机的位地址有如下4 4种表示方法:种表示方法:(1 1)直接使用位地址。)直接
26、使用位地址。例如例如 PSWPSW寄存器位寄存器位5 5地址为地址为0D5H0D5H。(2 2)位名称表示方法(位符号名)。)位名称表示方法(位符号名)。例如例如 PSWPSW寄存器位寄存器位5 5是是F0F0标志位,则可使用标志位,则可使用F0F0表示该位。表示该位。(3 3)单元地址加位数的表示方法。)单元地址加位数的表示方法。例如例如 PSWPSW寄存器位寄存器位5 5,表示为,表示为0D0H.50D0H.5。(4 4)专用寄存器符号加位数的表示方法。例如)专用寄存器符号加位数的表示方法。例如 PSWPSW寄存器的寄存器的 位位5 5,表示为,表示为PSW.5PSW.5。2022-7-2
27、620 数据传送指令共有数据传送指令共有2929条。条。5151单片机中的传送指令约定从右单片机中的传送指令约定从右向左传送数据向左传送数据,把源操作数传送到目的操作数,指令执行后,把源操作数传送到目的操作数,指令执行后,源操作数不改变,源操作数不改变,目的操作数目的操作数的内容修改为源操作数的内容修改为源操作数。交换指交换指令也属于数据传送指令,是把两个地址单元的内容相互交换。令也属于数据传送指令,是把两个地址单元的内容相互交换。作用:作用:数据传送指令主要用于在单片机片内数据传送指令主要用于在单片机片内RAMRAM和特殊功能和特殊功能寄存器寄存器SFRSFR之间传送数据,也可以用于在累加器
28、之间传送数据,也可以用于在累加器A A和片外存储单和片外存储单元之间传送数据。元之间传送数据。特点:特点:数据传送类指令不影响标志位(进位标志数据传送类指令不影响标志位(进位标志CYCY、半进、半进位标志位标志ACAC和溢出标志和溢出标志OVOV),),但当传送或交换数据后影响累加器但当传送或交换数据后影响累加器A A的值时,奇偶标志位的值时,奇偶标志位P P的值则按的值则按A A的值重新设定。的值重新设定。2022-7-2621 内部数据存储器内部数据存储器RAMRAM区是数据传送最活跃的区域,可用的指区是数据传送最活跃的区域,可用的指令数也最多,共有令数也最多,共有1616条指令,指令操作
29、码助记符为条指令,指令操作码助记符为MOV。指令格式:指令格式:MOV 目的操作数,目的操作数,源操作数源操作数 功能:功能:把源把源操作数的内容传给目的操作数操作数的内容传给目的操作数,而源操作数的而源操作数的内容不变,不影响标志位。但当执行结果改变累加器内容不变,不影响标志位。但当执行结果改变累加器A的值时,的值时,会使奇偶标志会使奇偶标志P变化变化。1.1.以累加器为目的操作数的指令(以累加器为目的操作数的指令(4 4条)条)MOV A,Rn ;(;(A)(Rn),),(n=07)MOV A,direct ;(;(A)(direct)MOV A,Ri ;(;(A)(Ri),(i=0、1)
30、MOV A,data ;(;(A)data 2022-7-2622 这组指令的目的操作数都是累加器这组指令的目的操作数都是累加器A,源操作数的寻址方式源操作数的寻址方式采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。2.2.以寄存器以寄存器RnRn为目的操作数的指令(为目的操作数的指令(3 3条)条)MOV Rn,A ;(Rn)(A),(n=07)MOV Rn,direct ;(Rn)(direct),(n=07)MOV Rn,data ;(Rn)data,(n=07)这组指令都是以工作寄存器为目的操作数,这组指令都是以工作寄存器为目的操
31、作数,源操作数的寻源操作数的寻址方式采用寄存器寻址、直接寻址和立即寻址。址方式采用寄存器寻址、直接寻址和立即寻址。2022-7-26233.以直接地址为目的操作数的指令(以直接地址为目的操作数的指令(5条)条)MOV direct,A ;(;(direct)(A)MOV direct,Rn ;(;(direct)(Rn),(),(n=07)MOV directl,direct2 ;(direct1)(direct2)MOV direct,Ri ;(direct)(Ri),(,(i=0、1)MOV direct,data ;(direct)data 这组指令的目的操作数都是直接寻址单元,这组指令
32、的目的操作数都是直接寻址单元,源操作数采用源操作数采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。2022-7-26244.4.以间接地址为目的操作数的指令(以间接地址为目的操作数的指令(3 3条)条)MOV Ri,A ;(;(Ri)(A)MOV Ri,direct ;(;(Ri)(direct)MOV Ri,data ;(;(Ri)data 这组指令的目的操作数都是间接寻址单元,这组指令的目的操作数都是间接寻址单元,源操作数可采用源操作数可采用寄存器寻址、直接寻址和立即寻址方式。寄存器寻址、直接寻址和立即寻址方式。5.5.十六位数据的传递指
33、令(十六位数据的传递指令(1 1条)条)MOV DPTR,data16 ;(;(DPTR)data16 指令功能:将指令功能:将1616位立即数送入位立即数送入DPTRDPTR,高,高8 8位送入位送入DPHDPH,低,低8 8位送位送入入DPLDPL。2022-7-2625 例如:例如:MOV DPH,#35H MOV DPL,#12H就相当于执行了就相当于执行了 MOV DPTR,#3512H。图图3-4 内部内部RAM间数据传递关系间数据传递关系 判断下列指令正、误判断下列指令正、误 MOV#30H,A MOV A,R2MOV R1,R3 MOV R1,R0 MOV R1,R2 MOV
34、R1,R0小结与注意点小结与注意点 2022-7-2626【例题【例题3-23-2】若(若(R0R0)=30H=30H,片内,片内RAMRAM(30H30H)=57H=57H,片内,片内RAMRAM(40H40H)=7FH=7FH,试比较:,试比较:MOV A,R0 和和 MOV A,R0 MOV A,#40H 和和 MOV A,40H 执行后的结果执行后的结果解:解:它们的执行结果为:它们的执行结果为:MOV A,R0 ;(A)=30H MOV A,R0 ;(A)=57H MOV A,#40H ;(A)=40H MOV A,40H ;(A)=7FH 【例题【例题3-53-5】完成将片内完成将
35、片内RAM15HRAM15H单元的内容单元的内容0A7H0A7H送送55H55H单元。单元。解法解法1 1:MOV 55H,15H解法解法2:MOV R6,15H MOV 55H,R6解法解法3:MOV R1,15H MOV 55H,R1解法解法4:MOV A,15H MOV 55H,A2022-7-2627【例题【例题3-63-6】编写把编写把30H30H和和40H40H单元的内容进行交换的程序段。单元的内容进行交换的程序段。解:解:分析,分析,30H30H和和40H40H单元中都装有数据,单元中都装有数据,要想把其中的内容要想把其中的内容相交换必须寻求第三个存储单元对其中的一个数进行相交换
36、必须寻求第三个存储单元对其中的一个数进行暂存(缓暂存(缓冲)冲),若这个存储单元选为累加器若这个存储单元选为累加器A A,则相应程序如下:,则相应程序如下:MOV A,30H ;(A)(30H)MOV 30H,40H ;(30H)(40H)MOV 40H,A ;(40H)(A)2022-7-2628 51 51系列单片机中,与外部存储器系列单片机中,与外部存储器RAMRAM或或I/OI/O端口之间进行数端口之间进行数据交换的只可以是累加器据交换的只可以是累加器A A。即所有片外。即所有片外RAMRAM或者或者I/OI/O端口数据端口数据传送必须通过累加器传送必须通过累加器A A进行。进行。指令
37、指令助记符助记符为为MOVXMOVX,其中的其中的X X表示表示外部(外部(External),共计共计4 4条指令。条指令。MOVX A,Ri ;(;(A)(Ri)读操作读操作MOVX Ri,A ;(;(Ri)(A)写操作写操作MOVX A,DPTR ;(;(A)(DPTR)读读MOVX DPTR,A ;(;(DPTR)(A)写写要点分析:要点分析:(1 1)访问片外)访问片外RAMRAM,需要知道,需要知道RAMRAM单元的地址,在后两条指令单元的地址,在后两条指令中,地址是被直接放在中,地址是被直接放在DPTRDPTR中,中,可寻址外部可寻址外部RAMRAM的的64KB64KB空间空间。
38、而。而前两条指令,由于前两条指令,由于RiRi(即(即R0R0或或R1R1)是是8 8位的寄存器,所以仅限于位的寄存器,所以仅限于访问片外访问片外RAMRAM的低的低256256个单元。个单元。2022-7-2629【例题【例题3-73-7】实现将外部实现将外部RAMRAM中中0010H0010H单元中的内容送单元中的内容送入外部入外部RAMRAM中中2000H2000H单元中。单元中。(2 2)使用访问外部)使用访问外部RAMRAM数据传送指令时,应当数据传送指令时,应当首先将要读或首先将要读或写的地址送人写的地址送人DPTRDPTR或或RiRi中,然后再用读或者写命令中,然后再用读或者写命
39、令。(3 3)也)也可以由可以由P2P2与与R0R0或或P2P2与与R1R1组成组成1616位地址指针,寻址外部位地址指针,寻址外部RAMRAM的的64KB64KB空间空间。解:解:程序程序片段如下片段如下:MOV P2,00H MOV R0,10H MOVX A,R0 MOV DPTR,2000H MOVX DPTR,A2022-7-2630【例题【例题3-83-8】将外部存储器将外部存储器2000H2000H单元的内容送入单元的内容送入2100H2100H单元。单元。解:解:程序如下:程序如下:MOV DPTR,#2000H ;(DPTR)2000H MOVX A,DPTR ;(A)(DP
40、TR)MOV DPTR,#2100H ;(DPTR)2100H MOVX DPTR,A ;(DPTR)(A)2022-7-2631 这类指令共有这类指令共有2 2条,均属于变址寻址指令,因专门用于从条,均属于变址寻址指令,因专门用于从ROMROM中查找数据而又称为中查找数据而又称为查表指令查表指令。指令助记符指令助记符为:为:MOVC,其中的,其中的C C表示代码(表示代码(Code)。)。指令的格式为:指令的格式为:MOVC A,A十十DPTR ;(;(A)(A)十十(DPTR)读操作读操作 MOVC A,A十十PC ;(;(PC)(PC)十十1,(A)(A)十十(PC)功能:功能:把累加器
41、把累加器A A中内容中内容(8(8位无符号数位无符号数)加上基址寄存器(加上基址寄存器(PCPC,DPTRDPTR)内容,求得程序存储器某单元地址,再将该单元内容送到累加器内容,求得程序存储器某单元地址,再将该单元内容送到累加器A A中。中。2022-7-2632 (1)MOVC A,A+DPTR 该指令的执行结果只与指针该指令的执行结果只与指针DPTRDPTR及累加器及累加器A A的内容有关,与的内容有关,与该指令存放的地址无关。因此,表格的大小和位置可以在该指令存放的地址无关。因此,表格的大小和位置可以在64KB64KB程程序存储器中任意安排,并且一个表格可以为各个程序块所共用。序存储器中
42、任意安排,并且一个表格可以为各个程序块所共用。(2)MOVC A,A+PC 该指令不改变特殊功能寄存器和该指令不改变特殊功能寄存器和PCPC的状态,只要根据的状态,只要根据A A的内容的内容就可以取出表格中的常数。但是表格只能放在该条查表指令后面就可以取出表格中的常数。但是表格只能放在该条查表指令后面的的256256个单元之内,表格的大小受到限制,而且表格只能被一段个单元之内,表格的大小受到限制,而且表格只能被一段程序所利用。程序所利用。?2022-7-2633【例题【例题3-9】在片内在片内20H单元存有一个单元存有一个09的的BCD码数,用查码数,用查表法获得相应的表法获得相应的ASCII
43、码,并将其送入码,并将其送入21H单元。单元。(20H)=03H)ORG 1000H ;指明程序在;指明程序在ROM中存放始地址中存放始地址1000HBCD_ASCl:MOV A,20H;(A)(20H),(),(A)03H1002H ADD A,3 ;累加器(;累加器(A)(A)+3,修正偏移量,修正偏移量1004H MOVC A,A+PC;PC当前值当前值1005H1005H MOV 21H,A ;(;(A)+(PC)=06H+1005H=100BH1007H RET ;AROM(100BH),(),(A)=33H1008H TAB:DB 30H1009H DB 31H100AH DB 3
44、2H100BH DB 33H100CH DB 34H100DH DB 35H2022-7-2634程序存储器空间的任何地址上程序存储器空间的任何地址上 ORG 1000BCD_ASC2:MOV A,20H MOV DPTR,TAB ;TAB首址送首址送DPTR MOVC A,A+DPTR ;查表;查表 MOV 21H,A RET TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H 2022-7-2635数据交换指令分为两种:字节交换和半字节交换指令数据交换指令分为两种:字节交换和半字节交换指令,共共5条条。1.1.字节交换指令字节交换指令(XCH,Ex
45、change 3 3条条)XCH A,Rn ;(;(A)(Rn)XCH A,Ri ;(;(A)(Ri)XCH A,direct ;(;(A)(direct)功能:功能:将累加器将累加器A A的内容与源操作数(的内容与源操作数(RnRn、directdirect或或RiRi)所指定)所指定单元的内容相互交换。单元的内容相互交换。2.2.半字节交换指令(半字节交换指令(1 1条)条)XCHD A,Ri ;(A)30 (Ri)30功能:功能:将累加器将累加器A A中的内容的低四位与中的内容的低四位与RiRi所指的片内所指的片内RAMRAM单元中的单元中的低低四位互换四位互换,但它们的,但它们的高四位
46、均不变高四位均不变。2022-7-26363.3.累加器累加器A A高低半字节交换指令(高低半字节交换指令(1 1条)条)SWAP A ;(A)74(A)30 【注意【注意】数据交换主要是在内部数据交换主要是在内部RAMRAM单元与累加器单元与累加器A A之间进行,之间进行,可以保存目的操作数。可以保存目的操作数。例如例如 将片内将片内RAM 60HRAM 60H单元与单元与61H61H单元的数据交换。单元的数据交换。不能用:不能用:XCH 60H,61H应该写成:应该写成:MOV A,60H XCH A,61H MOV 60H,A功能:功能:将累加器将累加器A的高的高4位与低位与低4位内容互
47、换,位内容互换,不影响标志位不影响标志位。MOV R0,60H MOV A,R0 XCH A,61HMOV 61H,A()MOV R0,#60H MOV A,R0 XCH A,61H MOV 61H,A()2022-7-2637 片内片内RAMRAM数据区中数据区中具有先进后出特点的存储区域具有先进后出特点的存储区域称为堆栈,称为堆栈,主要用于保护断点和恢复现场。堆栈操作有主要用于保护断点和恢复现场。堆栈操作有进栈和出栈进栈和出栈两种操作,两种操作,即压入和弹出数据。即压入和弹出数据。2 2条条指令指令PUSH direct ;(;(SP)(SP)+1,(SP)(direct)POP dire
48、ct ;(;(direct)(SP),(,(SP)(SP)-1功能:功能:(1 1)PUSHPUSH称为进栈指令称为进栈指令,将指定的直接寻址单元的内容压,将指定的直接寻址单元的内容压入堆栈。先将堆栈指针入堆栈。先将堆栈指针SPSP的内容的内容+1+1,指向栈顶的一个单元,然,指向栈顶的一个单元,然后把指令指定的直接寻址单元内容压入该单元。后把指令指定的直接寻址单元内容压入该单元。(2 2)POPPOP称为出栈指令称为出栈指令,它是将当前堆栈指针,它是将当前堆栈指针SPSP所指示的单所指示的单元内容弹出到指定的内部元内容弹出到指定的内部RAMRAM单元中,然后再将单元中,然后再将SPSP减减1
49、 1。2022-7-2638 【注意【注意】堆栈操作的特点是堆栈操作的特点是“先进后出先进后出”,在使用时应注,在使用时应注意指令顺序;意指令顺序;进栈、出栈指令只能以直接寻址方式来取得操作进栈、出栈指令只能以直接寻址方式来取得操作数数,不能用累加器不能用累加器A A或工作寄存器或工作寄存器RnRn作为操作数作为操作数。指令指令PUSH 40H操作示意图操作示意图 指令指令POP 30H操作示意图操作示意图2022-7-2639【例题【例题3-133-13】分析以下程序的运行结果分析以下程序的运行结果 MOV R2,05H MOV A,01H PUSH ACC ;ACC表示累加器表示累加器A的
50、直接地址的直接地址 PUSH 02H ;02H表示表示R2的直接地址的直接地址 POP ACC POP 02H解:解:结果是(结果是(R2R2)=01H=01H,而(,而(A A)=05H=05H。也就是两者进行了数。也就是两者进行了数据交换。因此,使用堆栈时,入栈的顺序和出栈的顺序必须据交换。因此,使用堆栈时,入栈的顺序和出栈的顺序必须相反,才能保证数据被送回原位,即恢复现场。相反,才能保证数据被送回原位,即恢复现场。2022-7-2640 5151系列单片机的算术运算类指令系列单片机的算术运算类指令共有共有2424条条,包括加、减、,包括加、减、乘、除乘、除4 4种基本算术运算指令,这种基