微机控制系统与应用3(2013老师修改补充版)_第1页
微机控制系统与应用3(2013老师修改补充版)_第2页
微机控制系统与应用3(2013老师修改补充版)_第3页
微机控制系统与应用3(2013老师修改补充版)_第4页
微机控制系统与应用3(2013老师修改补充版)_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 寻址方式与指令系统3.1 MCS-513.1 MCS-51单片机的寻址方式单片机的寻址方式3.2 3.2 指令系统简介指令系统简介3.3 3.3 伪指令伪指令3.4.3.4.程序设计举例程序设计举例1 指令指令 :控制计算机完成指定操作的命令,由操作码和操作数组成。控制计算机完成指定操作的命令,由操作码和操作数组成。 机器指令:机器指令:指令的指令的1616进制代码形式。例如:进制代码形式。例如:74H 37H74H 37H 汇编指令:汇编指令:助记符形式的指令。例如:助记符形式的指令。例如:MOV AMOV A,#37H#37H 操作码操作码 :说明计算机应该完成的操作内容说明计算机

2、应该完成的操作内容, ,采用助记符表示。采用助记符表示。 操作数操作数 :指令操作的对象。指令操作的对象。指令格式指令格式:操作码助记符操作码助记符 目的操作数,源操作数目的操作数,源操作数5151指令系统中描述操作数的符号如下:指令系统中描述操作数的符号如下:RnRn:表示通用寄存器:表示通用寄存器R R0 0-R-R7 7。RiRi:表示通用寄存器中可用作:表示通用寄存器中可用作8 8位地址指针的位地址指针的R R0 0和和R Rl l。directdirect:表示片内:表示片内RAMRAM的的8 8位直接地址。位直接地址。#data/#data16 #data/#data16 :表示:

3、表示8 8位或位或1616位常数。位常数。addrl6/addr11addrl6/addr11:表示外部程序存储器的:表示外部程序存储器的1616位或位或1111位地址。位地址。relrel:表示:表示8 8位偏移量。位偏移量。bitbit:表示直接位地址。:表示直接位地址。寄存器名:可以由指令访问的特殊寄存器(寄存器名:可以由指令访问的特殊寄存器(SFRSFR)。)。2第三章 寻址方式与指令系统3.1 MCS-51单片机的寻址方式 寻址方式寻址方式 :指令找寻操作数的存放地址的方式指令找寻操作数的存放地址的方式。1 1 立即寻址:立即寻址: 指令中直接给出了运算数据,操作数存放在紧跟在操作码

4、之后的指令中直接给出了运算数据,操作数存放在紧跟在操作码之后的下一个字节中,只适用于操作数为常数的情况。下一个字节中,只适用于操作数为常数的情况。 例如指令例如指令MOV AMOV A,#37H #37H 将常数将常数37H37H送往累加器中。送往累加器中。图3 .1(a) 立 即寻址方式示意图图3 .1(a) 立 即寻址方式示意图0011 01110011 0111PC:PC:0111 01000111 0100程序存储器程序存储器A:A:0011 01110011 011133.1 MCS-51单片机的寻址方式2 2 直接直接寻址寻址 指令中给出了操作数的存放地址,适用于片内指令中给出了操

5、作数的存放地址,适用于片内RAMRAM的低的低128B128B和特和特殊功能寄存器的数据操作。殊功能寄存器的数据操作。 例如指令例如指令MOV AMOV A,70H 70H 将将RAMRAM中存放在中存放在70H70H单元的数据送往累单元的数据送往累加器中。加器中。 (MOV A, P0MOV A, P0等价于等价于MOV A, 80HMOV A, 80H)图3 .1(b) 直 接寻址方式示意图图3 .1(b) 直 接寻址方式示意图PC:PC:1110 01011110 0101程序存储器程序存储器MOV A,70HMOV A,70H0111 00000111 0000X XX XX XX X

6、数据存储器数据存储器E0HE0H70H70HACCACC43.1 MCS-51单片机的寻址方式3 3 寄存器寻址寄存器寻址 指令中给出了操作数存放的寄存器,适用于通用寄存器指令中给出了操作数存放的寄存器,适用于通用寄存器R0R0 R7R7和和特殊功能寄存器中的特殊功能寄存器中的A A、B B、DPTRDPTR的数据操作。的数据操作。 例如指令例如指令MOV AMOV A,R0 R0 将将R0R0中存放的数据送往累加器中。中存放的数据送往累加器中。图3 .1(c) 寄 存器寻址方式示意图图3 .1(c) 寄 存器寻址方式示意图PC:PC:1110 10001110 1000程序存储器程序存储器M

7、OV A,R0MOV A,R0X XX XX XX X数据存储器数据存储器E0HE0H00H00HACCACC53.1 MCS-51单片机的寻址方式4 4 寄存器间接寻址寄存器间接寻址 指令中给出作为地址指针的寄存器(指令中给出作为地址指针的寄存器(R0R0、R1R1、DPTRDPTR),实际操),实际操作数存放在该寄存器指向的作数存放在该寄存器指向的RAMRAM单元。单元。 例如设例如设DPTR=0123HDPTR=0123H, (0123H)=12H(0123H)=12H,则指令,则指令MOVX AMOVX A,DPTR DPTR 将将0123H0123H中存放的数据中存放的数据12H12

8、H送往累加器中。送往累加器中。 63.1 MCS-51单片机的寻址方式5 5 变址寻址变址寻址 以基址寄存器(以基址寄存器(DPTRDPTR或或PCPC)的值为基地址,加上变址寄存器)的值为基地址,加上变址寄存器ACCACC的值构成操作数的存储地址,适用于的值构成操作数的存储地址,适用于ROMROM中的查表操作。中的查表操作。例如:例如: MOV A,#01HMOV A,#01H MOV DPTR,#TABLE MOV DPTR,#TABLE MOVC A,A+DPTR MOVC A,A+DPTR TABLE: DB 30H TABLE: DB 30H DB 31H DB 31H .73.1

9、MCS-51单片机的寻址方式6 6 相对寻址相对寻址 将程序计数器将程序计数器PCPC的值加上指令中给出的地址相对偏移,结果作的值加上指令中给出的地址相对偏移,结果作为转移指令的目标地址,适用于相对转移指令为转移指令的目标地址,适用于相对转移指令JC relJC rel(relrel的范围的范围为为- -128 128 +127 +127 ,以补码表示)。,以补码表示)。图3 .1(f) 相 对寻址方式示意图图3 .1(f) 相 对寻址方式示意图PC:1 000HPC:1 000H0100 00000100 0000程序存储器程序存储器0111 01010111 0101.1077H1077H

10、ALUALU1002H1002HJC relJC relX XX XPC=1002HPC=1002Hrel=75Hrel=75H83.1 MCS-51单片机的寻址方式7 7 位寻址位寻址 指令中给出操作数的可寻址位的直接地址。适用于布尔处理器的指令中给出操作数的可寻址位的直接地址。适用于布尔处理器的操作(置位、清除、求反、为操作(置位、清除、求反、为0 0或或1 1转移、位与、位或、位传送等)。转移、位与、位或、位传送等)。 例如,指令例如,指令MOV CMOV C,P1.0 P1.0 将将P1P1口的第口的第0 0位的值送至进位位位的值送至进位位CYCY。9表表 3.1 MCS-51 单单片

11、片机机寻寻址址方方式式 寻寻址址方方式式 相相应应的的存存储储器器空空间间 立立即即寻寻址址 程程序序存存储储器器 立立即即数数 直直接接寻寻址址 片片内内 RAM 低低 128B,特特殊殊功功能能寄寄存存器器 寄寄存存器器寻寻址址 R0R7,ACC,B,DPTR 寄寄存存器器间间接接寻寻址址 片片内内 RAM(以以R0、R1 为为指指针针) 片片外外 RAM(以以R0、R1、DPTR 为为指指针针) 变变址址寻寻址址 程程序序存存储储器器(A+PC、A+DPTR) 相相对对寻寻址址 程程序序存存储储器器 转转移移地地址址=PC+rel 位位寻寻址址 片片内内 RAM 及及 SFR 中中的的可

12、可位位寻寻址址空空间间 10立即寻址、变址寻址、相对寻址只用于访问程序存储器立即寻址、变址寻址、相对寻址只用于访问程序存储器ROMROM。寄存器寻址、直接寻址、位寻址用于访问内部寄存器寻址、直接寻址、位寻址用于访问内部RAMRAM和特殊寄存器和特殊寄存器SFRSFR。寄存器间接寻址用于访问寄存器间接寻址用于访问RAMRAM,包括内部,包括内部RAMRAM和外部和外部RAMRAM。直接寻址是访问特殊寄存器直接寻址是访问特殊寄存器SFRSFR的唯一方法。的唯一方法。只有寄存器间接寻址方式能访问外部只有寄存器间接寻址方式能访问外部RAMRAM。 以上讨论的是源操作数的寻址方式,目的操作数的寻址方式与

13、之类似。以上讨论的是源操作数的寻址方式,目的操作数的寻址方式与之类似。 小结:小结:3.1 MCS-51单片机的寻址方式3.2 指令系统简介指令分类:指令分类: 按占用的存储空间分类:单字节指令(按占用的存储空间分类:单字节指令(4949条)、双字节指令(条)、双字节指令(4545)、)、 三字节指令(三字节指令(1717条)条) 按需要的执行时间分类:单周期指令(按需要的执行时间分类:单周期指令(6464条)、双周期指令(条)、双周期指令(4545)、)、 四周期指令(四周期指令(2 2条)条) 按功能分类:数据传送(按功能分类:数据传送(2929条)条)、算术运算、算术运算(2424条)条

14、)、逻辑运算、逻辑运算(2424条)条)、控制转移(、控制转移(1717条)、位运算(条)、位运算(1717条)条)11 数据传送类指令一共有数据传送类指令一共有2929条,条,主要功能主要功能是把源操作数传送到目的是把源操作数传送到目的操作数。操作数。一、内部一、内部RAMRAM的数据传送指令(的数据传送指令(1616条)条) 内部内部RAMRAM的数据传送指令包括累加器、的数据传送指令包括累加器、工作工作寄存器、特殊寄存器、寄存器、特殊寄存器、RAMRAM单元之间的相互数据传送。单元之间的相互数据传送。1 1与累加器有关的数据传送指令与累加器有关的数据传送指令 MOV A, RnMOV A

15、, Rn; ARn; ARn MOV Rn, AMOV Rn, A; RnA; RnA MOV A, directMOV A, direct; A(direct); A(direct)MOV direct, AMOV direct, A; (direct) A; (direct) AMOV AMOV A,RiRi; A(Ri); A(Ri)MOV Ri, AMOV Ri, A; (Ri)A; (Ri)A3.2 指令系统简介123.2.1 3.2.1 数据传送类指令数据传送类指令3.2 指令系统简介2 2立即数传送指令立即数传送指令 MOV A, #dataMOV A, #data; Adata

16、; AdataMOV direct, #dataMOV direct, #data; (direct)data; (direct)dataMOV Rn, #dataMOV Rn, #data; Rndata; Rndata MOV MOV Ri, #dataRi, #data; (Ri)data; (Ri)dataMOV DPTR, #data16MOV DPTR, #data16 ; DPTRdata16; DPTRdata163 3内部内部RAMRAM单元之间的数据传送指令单元之间的数据传送指令MOV direct1, direct2MOV direct1, direct2 ; (dire

17、ct1)(direct2); (direct1)(direct2)MOV direct, RnMOV direct, Rn; (direct)Rn; (direct)RnMOV Rn, directMOV Rn, direct; Rn(direct); Rn(direct)MOV direct, MOV direct, RiRi; (direct)(Ri); (direct)(Ri)MOV Ri, direct MOV Ri, direct ; (Ri)(direct); (Ri)(direct)13二、外部二、外部RAMRAM数据传送指令(数据传送指令(4 4条)条) 外部外部RAMRAM单

18、元采用寄存器间接寻址的方式,与累加器单元采用寄存器间接寻址的方式,与累加器A A进行数据传送。进行数据传送。MOVX A, MOVX A, DPTRDPTR; A(DPTR); A(DPTR)MOVX MOVX DPTR, ADPTR, A; (DPTR)A; (DPTR)AMOVX A, MOVX A, RiRi; A(Ri); A(Ri)MOVX MOVX Ri, ARi, A; (Ri)A; (Ri)A说明:说明: (1) (1) 前前2 2条采用条采用DPTRDPTR作为作为1616位地址指针,可寻址外部位地址指针,可寻址外部RAMRAM的整个的整个64KB64KB空空间。后间。后2

19、2条采用条采用RiRi作为作为8 8位地址指针,可寻址外部位地址指针,可寻址外部RAMRAM最低的最低的256256个单元。个单元。 (2) (2) 指令助记符采用指令助记符采用MOVXMOVX,与内部,与内部RAMRAM数据传送指令数据传送指令MOVMOV不一样,表示不一样,表示MCS-51MCS-51对内部对内部RAMRAM和外部和外部RAMRAM独立编址,采用不同的指令访问。独立编址,采用不同的指令访问。 (3) (3) 外部外部RAMRAM单元只能与累加器单元只能与累加器A A之间进行数据传送。之间进行数据传送。 (4)(4)首先将要读或写的地址送入首先将要读或写的地址送入DPTRDP

20、TR或或RiRi中,然后再用读写命令中,然后再用读写命令 3.2 指令系统简介14例例2 2:将外部将外部RAMRAM中中70H70H单单元中的内容送入外部元中的内容送入外部RAMRAM中中71H71H单元中。单元中。 MOV R0MOV R0,#70H#70HMOVX AMOVX A,R0R0MOV R0, #71HMOV R0, #71HMOVX R0, AMOVX R0, A 3.2 指令系统简介15例例1 1:将内部将内部RAMRAM中中70H70H单单元中的内容送入内部元中的内容送入内部RAMRAM中中71H71H单元中。单元中。 MOV 71H, 70HMOV 71H, 70H 3

21、.2 指令系统简介三、程序存储器取数据指令(三、程序存储器取数据指令(2 2条)条) 此类指令完成从此类指令完成从ROMROM中读出数据,送给累加器中读出数据,送给累加器A A。MOVC A, MOVC A, A+DPTRA+DPTR; A(A)+(DPTR); A(A)+(DPTR)MOVC A, MOVC A, A+PCA+PC; A(A)+(PC); A(A)+(PC)说明:说明: (1) (1) 两条指令都采用了变址寻址方式。两条指令都采用了变址寻址方式。 (2) (2) 前一条指令采用前一条指令采用DPTRDPTR作为基址寄存器,寻址范围是整个程序作为基址寄存器,寻址范围是整个程序存

22、储器的存储器的64KB64KB空间。后一条指令采用空间。后一条指令采用PCPC作为基址寄存器,只能读作为基址寄存器,只能读出以当前出以当前MOVCMOVC指令为起始的指令为起始的256256个地址单元之内的任一单元。个地址单元之内的任一单元。 (3)(3)这两条指令常用于查表操作,也称为查表指令。这两条指令常用于查表操作,也称为查表指令。 (4)(4)查找到的结果被放在查找到的结果被放在A A中,因此,本条指令执行前后,中,因此,本条指令执行前后,A A中的中的值不一定相同值不一定相同 16四、数据交换指令(四、数据交换指令(5 5条)条) 此类指令完成累加器此类指令完成累加器A A与内部与内

23、部RAMRAM单元之间的字节或半字节交换。单元之间的字节或半字节交换。1 1累加器累加器A A与内部与内部RAMRAM单元内容的全字节交换单元内容的全字节交换XCH A, RnXCH A, Rn; ARn; ARnXCH A, directXCH A, direct; A(direc); A(direc)XCH A, RiXCH A, Ri; A(Ri); A(Ri)2 2累加器累加器A A与内部与内部RAMRAM单元内容的低单元内容的低4 4位进行交换位进行交换XCHD A, XCHD A, Ri Ri ; A; A3 30 0(Ri)(Ri)3 30 0 3 3累加器累加器A A的高的高4

24、 4位与低位与低4 4位交换位交换SWAP ASWAP A; A; A3 30 0AA7 74 43.2 指令系统简介17五、堆栈操作指令(五、堆栈操作指令(2 2条)条)1 1入栈指令,将内部入栈指令,将内部RAMRAM单元内容送入栈顶单元单元内容送入栈顶单元PUSH directPUSH direct; SPSP+l, (SP)(direct); SPSP+l, (SP)(direct)2 2出栈指令,将栈顶单元内容取出传送到内部出栈指令,将栈顶单元内容取出传送到内部RAMRAM单元单元 POP direct POP direct ; (direct)(SP), SPSP-1; (dire

25、ct)(SP), SPSP-1六、数据传送类指令小结:六、数据传送类指令小结: (1)(1)对不同的存储器空间采用了不同的指令来访问,请注意对不同的存储器空间采用了不同的指令来访问,请注意MOVMOV、MOVXMOVX、MOVCMOVC的区别。的区别。 (2)(2)数据传送类指令不影响状态字数据传送类指令不影响状态字PSWPSW。 (3)MCS-51(3)MCS-51指令系统没有专用的输入输出指令操作,它采用数据指令系统没有专用的输入输出指令操作,它采用数据传送指令来进行传送指令来进行I/OI/O操作。例如操作。例如 MOV A, P1MOV A, P1; ; MOVX A, DPTR MOV

26、X A, DPTR3.2 指令系统简介183.2.2 3.2.2 算术运算类指令算术运算类指令3.2 指令系统简介 MCS-51 MCS-51的算术运算指令共有的算术运算指令共有2424条,包括了加、减、乘、除等各种运条,包括了加、减、乘、除等各种运算。全部指令都是算。全部指令都是8 8位数运算。位数运算。一、加法指令(一、加法指令(4 4条)条) 加法指令的被加数总是累加器加法指令的被加数总是累加器A A,并且结果也放在,并且结果也放在A A中中ADD A, RnADD A, Rn; AA+Rn; AA+RnADD A, directADD A, direct; AA+(direct); A

27、A+(direct)ADD A, ADD A, Ri Ri ; AA+(Ri); AA+(Ri)ADD A,#dataADD A,#data; AA+data; AA+data 加法操作影响加法操作影响PSWPSW中的状态位中的状态位CYCY,ACAC,OVOV。19 符号数(符号数(128128127127)运算溢出的判定规则:)运算溢出的判定规则: 运算结果的最高位运算结果的最高位(D6)(D6)与符号位与符号位(D7)(D7)二者只有一个产生进位(或借位)二者只有一个产生进位(或借位)时,产生溢出,时,产生溢出,OVOV置置1 1。否则,没有溢出,。否则,没有溢出,OVOV清清0 0。

28、例如,例如,A=#49HA=#49H,执行加法指令:,执行加法指令:ADD AADD A,#6BH #6BH 其结果其结果A=#B4H A=#B4H (十进制:(十进制:180180) 。因为作为符号数时,。因为作为符号数时,49H49H与与6BH6BH都是正数,相加的结果符号位为都是正数,相加的结果符号位为1 1,即变成了负数,显然结果不正确。,即变成了负数,显然结果不正确。 0 1 0 0 1 0 0 10 1 0 0 1 0 0 1 + +)0 1 1 0 1 0 1 10 1 1 0 1 0 1 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 按照判定规则,位按照判

29、定规则,位6 6向上进位,而位向上进位,而位7 7未产生进位,产生溢出,未产生进位,产生溢出,OVOV将置将置位为位为1 1 ,与实际相符合。另外,这条指令的执行使,与实际相符合。另外,这条指令的执行使CY=0CY=0,AC=1AC=1。3.2 指令系统简介20二、带进位加法指令(二、带进位加法指令(4 4条)条)ADDC A, RnADDC A, Rn; AA+Rn+CY; AA+Rn+CYADDC A, directADDC A, direct; AA+(direct)+CY; AA+(direct)+CYADDC A, RiADDC A, Ri; AA+(Ri)+CY; AA+(Ri)+

30、CYADDC A, #dataADDC A, #data; AA+data+CY; AA+data+CY带进位加法指令影响带进位加法指令影响PSWPSW中的状态位中的状态位CYCY,ACAC,OVOV。带进位。带进位加法指令主要用于多字节数的加法运算。加法指令主要用于多字节数的加法运算。 三、加三、加1 1指令(指令(5 5条)条)INC AINC A; AA+1; AA+1( ADD A, #1 )( ADD A, #1 )INC RnINC Rn; RnRn+1; RnRn+1INC directINC direct; (direct)(direct)+1; (direct)(direct

31、)+1INC INC RiRi; (Ri)(Ri)+1; (Ri)(Ri)+1INC DPTRINC DPTR; DPTRDPTR+1; DPTRDPTR+1加加1 1指令不影响指令不影响PSWPSW中的状态位。中的状态位。3.2 指令系统简介21 四、减法指令(四、减法指令(4 4条)条)SUBB A, RnSUBB A, Rn; AA-Rn-CY; AA-Rn-CYSUBB A, directSUBB A, direct; AA-(direct)-CY; AA-(direct)-CYSUBB A, RiSUBB A, Ri; AA-(Ri)-CY; AA-(Ri)-CYSUBB A, #d

32、ataSUBB A, #data; AA-data-CY; AA-data-CY 减法操作影响减法操作影响PSWPSW中的状态位中的状态位CYCY,ACAC,OVOV。 五、减五、减l l指令(指令(4 4条)条)DEC ADEC A; AA-1; AA-1DEC RnDEC Rn; RnRn-1; RnRn-1DEC directDEC direct; direct(direct)-1; direct(direct)-1DEC DEC RiRi; (Ri)(Ri)-1; (Ri)(Ri)-1 与加与加1 1指令一样,减指令一样,减1 1指令同样不影响程序状态字指令同样不影响程序状态字PSWP

33、SW的状态。的状态。MCS-51MCS-51没有对没有对DPTRDPTR减减1 1的指令。的指令。3.2 指令系统简介223.2 指令系统简介六、乘除指令(六、乘除指令(2 2条)条) 乘法指令和除法指令都是单字节指令,执行时需乘法指令和除法指令都是单字节指令,执行时需4 4个机器周期。完个机器周期。完成成2 2个个8 8位无符号整数的乘法或除法。位无符号整数的乘法或除法。MUL ABMUL AB; BAA; BAAB BDIV ABDIV AB; AA/B, B; AA/B, B余数余数 乘法指令将乘法指令将A A和和B B寄存器中的寄存器中的2 2个个8 8位无符号整数相乘操作,结果为位无

34、符号整数相乘操作,结果为1616位无符号数,高位无符号数,高8 8位存于位存于B B中,低中,低8 8位存于位存于A A中。若乘法结果大于中。若乘法结果大于255255,即,即B B的内容不为的内容不为0 0时,溢出标志时,溢出标志OVOV置置1 1,否则置,否则置0 0。乘法指令执。乘法指令执行后,进位标志行后,进位标志CYCY总被清总被清0 0。 除法指令中,被除数在除法指令中,被除数在A A中,除数在中,除数在B B中,两个数均为中,两个数均为8 8位无符号整位无符号整数。除法运算结果的商存于数。除法运算结果的商存于A A,余数存于,余数存于B B。若除数为。若除数为0 0,溢出标志,溢

35、出标志OVOV置置1 1,否则置,否则置0 0。除法指令执行后,进位标志。除法指令执行后,进位标志CYCY同样总被清同样总被清0 0。 乘除指令都只对累加器乘除指令都只对累加器A A和寄存器和寄存器B B操作,影响操作,影响PSWPSW状态。状态。233.2 指令系统简介 七、十进制调整指令(七、十进制调整指令(1 1条)条) DA ADA A DA DA指令的功能是对指令的功能是对BCDBCD数加法运算结果进行调整。数加法运算结果进行调整。 DADA指令只影响进位指令只影响进位标志标志CYCY。调整规则:调整规则:(1 1)若)若AccAcc低低4 4位大于位大于9 9或或ACAC1 1,则

36、低,则低4 4位加位加6 6(2 2)若)若AccAcc高高4 4位大于位大于9 9或或CYCY1 1,则高,则高4 4位加位加6 6(3 3)若)若AccAcc高高4 4位大于等于位大于等于9 9且低且低4 4位大于位大于9 9,则高四位和低,则高四位和低4 4位均加位均加6 6(4 4)若)若AccAcc最高位因调整而产生进位,则将最高位因调整而产生进位,则将CYCY置置1 1;若不产生进位,则保;若不产生进位,则保留留CYCY在调整前的状态而不清零。在调整前的状态而不清零。 本指令只能对本指令只能对BCDBCD数加法结果进行调整,不能直接对数加法结果进行调整,不能直接对BCDBCD数的减

37、法进行数的减法进行调整。对调整。对BCDBCD数减法调整的方法是用补码表示减数,将减法化为加法运算,数减法调整的方法是用补码表示减数,将减法化为加法运算,再进行调整。再进行调整。【BCDBCD数补码数补码】999AH-BCD999AH-BCD数数2425八、算术运算类指令小结八、算术运算类指令小结 (1)(1)算术运算类指令大多影响算术运算类指令大多影响PSWPSW,但应注意:,但应注意:INCINC和和DECDEC指令不影响标志位;指令不影响标志位;乘除指令对标志位的影响有自己的特殊性;乘除指令对标志位的影响有自己的特殊性;DADA指令只影响指令只影响CYCY标志。标志。 (2)(2)减法运

38、其中只有带借位减法指令。减法运其中只有带借位减法指令。 (3)DA(3)DA指令只能调整指令只能调整BCDBCD数加法运算后的结果,对数加法运算后的结果,对BCDBCD数减法要转数减法要转换为加法后再调整。换为加法后再调整。3.2 指令系统简介263.2 指令系统简介算术运算类指令举例算术运算类指令举例例例1 1:有两个双字节数,按低字节在前的顺序分别存放在内部有两个双字节数,按低字节在前的顺序分别存放在内部RAMRAM的的30H30H、31H31H和和40H40H、41H41H单元中,求两数的和并存于单元中,求两数的和并存于30H30H、31H31H单元。假定和数不单元。假定和数不超过双字节

39、。超过双字节。MADD: MOV R0, #30HMADD: MOV R0, #30H; ;指向被加数低字节单元指向被加数低字节单元 R0=30HR0=30H MOV R1, #40H MOV R1, #40H; ;指向加数低字节单元指向加数低字节单元 R1=40HR1=40H MOV A, R0 MOV A, R0; ;取被加数低字节取被加数低字节 A=(R0)=(30H)A=(R0)=(30H) ADD ADD A, R1 A, R1; ;两低字节相加两低字节相加 A=A+(40H)=(30H)+(40H)A=A+(40H)=(30H)+(40H) MOV R0, A MOV R0, A;

40、 ;存低字节结果存低字节结果 (30H)=(30H)= (R0)= A(R0)= A INC R0 INC R0; ;指向被加数高字节单元指向被加数高字节单元 R0=31HR0=31H INC R1 INC R1; ;指向加数高字节单元指向加数高字节单元 R1=41HR1=41H MOV A, R0 MOV A, R0; ;取被加数高字节取被加数高字节 A=(R0)=(31H)A=(R0)=(31H) ADDC A, R1 ADDC A, R1; ;两高字节带进位相加两高字节带进位相加;A=A+(41H)=(31H)+(41H)A=A+(41H)=(31H)+(41H) MOV R0, A M

41、OV R0, A; ;存高字节结果存高字节结果 (31H)=(31H)= (R0)=A(R0)=A273.2 指令系统简介例例2 2:将存于外部将存于外部RAMRAM中中2000H2000H单元的一字节二进制数(假定其值小于单元的一字节二进制数(假定其值小于64H64H)转换为十进制数,以两位转换为十进制数,以两位BCDBCD码(组合码(组合BCDBCD)的形式存于内部)的形式存于内部RAMRAM的的30H30H单元中。单元中。BTOD: MOV DPTR, #2000H;BTOD: MOV DPTR, #2000H;指向二进制数单元指向二进制数单元 DPTR=2000HDPTR=2000HM

42、OVX A, DPTRMOVX A, DPTR ; ;取二进制数取二进制数 A=(DPTR)=(2000H)A=(DPTR)=(2000H)MOV B, #0AHMOV B, #0AH ; ;置除数为置除数为10 10 B=10B=10DIVDIVABAB ; ;分离十位数和个位数分离十位数和个位数 A=A=十位数十位数 B=B=个位数个位数SWAP ASWAP A ; ;十位数放入十位数放入A A的高的高4 4位位 A=A=十位数十位数+0000+0000XCHD AXCHD A,B B ; ;个位数移入个位数移入A A的低的低4 4位位 A=A=十位数十位数+ +个位数个位数MOV 30H

43、, AMOV 30H, A ; ;存结果存结果 (30H)= A=(30H)= A=十位数十位数+ +个位数个位数3.2 指令系统简介283.2.3 3.2.3 逻辑运算类指令逻辑运算类指令 MCS-51 MCS-51的逻辑运算指令共有的逻辑运算指令共有2424条,完成与、或、异或、取反、移位条,完成与、或、异或、取反、移位等操作。等操作。 一、逻辑与指令(一、逻辑与指令(6 6条)条)ANL A, Rn ANL A, Rn ; AARn; AARnANL A, directANL A, direct; AA(direct); AA(direct)ANL A, ANL A, Ri Ri ; A

44、A(Ri); AA(Ri)ANL A, #dataANL A, #data; AAdata; AAdataANL direct, AANL direct, A; (direct)A(direct); (direct)A(direct)ANL direct, #dataANL direct, #data; (direct)(direct)data; (direct)(direct)data 前前4 4条指令是以累加器条指令是以累加器A A为目的操作数,后为目的操作数,后2 2条指令是以直接地址单元条指令是以直接地址单元为目的操作数,逻辑与操作按位进行。为目的操作数,逻辑与操作按位进行。3.2 指

45、令系统简介29二、逻辑或指令(二、逻辑或指令(6 6条)条)ORL A, Rn ORL A, Rn ; AARn; AARnORL A, directORL A, direct; AA(direct); AA(direct)ORL A, ORL A, Ri Ri ; AA(Ri); AA(Ri)ORL A, #dataORL A, #data; AAdata; AAdataORL direct, AORL direct, A; (direct)A(direct); (direct)A(direct)ORL direct, #dataORL direct, #data; (direct)(dir

46、ect)data; (direct)(direct)data三、逻辑异或指令(三、逻辑异或指令(6 6条)条)XRL A, Rn XRL A, Rn ; AA Rn; AA RnXRL A, directXRL A, direct; AA direct; AA directXRL A, XRL A, Ri Ri ; AA (Ri); AA (Ri)XRL A, #dataXRL A, #data; AA data; AA dataXRL direct, AXRL direct, A; (direct)A (direct); (direct)A (direct)XRL direct, #data

47、XRL direct, #data; (direct)(direct) data; (direct)(direct) data 3.2 指令系统简介30四、累加器清零、取反指令(四、累加器清零、取反指令(2 2条)条)CLR ACLR A; A0; A0CPL ACPL A; AA; AA五、移位指令(五、移位指令(4 4条)条)RL ARL A; ;RR ARR A; ;RLC ARLC A; ;RRC ARRC A; ;A7 A0A7 A0A7 A0CYA7 A0CY六、逻辑运算类指令小结六、逻辑运算类指令小结 (1)(1)逻辑运算的所有指令都是按位进行操作的。逻辑运算的所有指令都是按位进

48、行操作的。 (2)(2)逻辑与、或、异或运算三组指令各有逻辑与、或、异或运算三组指令各有6 6条,都采用了相同种类的条,都采用了相同种类的寻址方式,寻址方式,4 4条是以条是以A A为目的操作数,两条以直接地址为目的操作数,为目的操作数,两条以直接地址为目的操作数,便于对各个内部便于对各个内部RAMRAM单元和单元和SFRSFR的内容进行逻辑运算。的内容进行逻辑运算。 (3)MCS-5l(3)MCS-5l没有求补指令,若要进行求补操作,可按没有求补指令,若要进行求补操作,可按“取反加取反加1 1”来进行。来进行。 (4)(4)除了带进位的左右移位指令会影响除了带进位的左右移位指令会影响CYCY

49、标志位之外,所有的逻辑标志位之外,所有的逻辑运算指令都不影响运算指令都不影响PSWPSW。3.2 指令系统简介31323.2 指令系统简介逻辑运算类指令举例逻辑运算类指令举例例例1.1.将内部将内部RAMRAM中中30H30H单元的内容取补码,并存入单元的内容取补码,并存入30H30H单元。单元。MCOD: MOV A, 30HMCOD: MOV A, 30H; ;取取30H30H单元内数据单元内数据 CPL ACPL A; ;将该数取反将该数取反 INC AINC A; ;加加1 1 MOV 30H, A MOV 30H, A; ;将原数据的补码存回将原数据的补码存回30H30H单元单元33

50、3.2 指令系统简介例例2.2.双字节数移位。将双字节数移位。将R2R2、R3R3中的一个双字节数左移一位,最低位补零,中的一个双字节数左移一位,最低位补零,最高位存最高位存CYCY中,假设中,假设R2R2中为高字节,中为高字节,R3R3中为低字节。中为低字节。RL16: CLR CRL16: CLR C; ;清进位标志位清进位标志位 MOV A, R3MOV A, R3; ;将低字节放入将低字节放入A A中中 RLC ARLC A; ;低字节左移一位,高位进入低字节左移一位,高位进入CYCY,最低位补零,最低位补零 MOV R3, AMOV R3, A; ;低字节移位后存入低字节移位后存入R

51、3R3 MOV A, R2 MOV A, R2; ;将高字节放入将高字节放入A A中中 RLC ARLC A; ;高字节左移一位,高字节左移一位,CYCY进入最低位,高位进入进入最低位,高位进入CYCY MOV R2, A MOV R2, A; ;高字节移位后存入高字节移位后存入R2R23.2.4 3.2.4 控制转移类指令控制转移类指令3.2 指令系统简介34 MCS-51 MCS-51的控制转移指令共有的控制转移指令共有1717条,完成程序流程的跳转操作。条,完成程序流程的跳转操作。一、无条件转移指令(一、无条件转移指令(4 4条)条)1 1长转移指令长转移指令 LJMP addrl6 ;

52、 PCaddrl6LJMP addrl6 ; PCaddrl6 长转移指令把长转移指令把1616位地址传送给位地址传送给PCPC,实现程序在,实现程序在64KB64KB程序存储器程序存储器范围内跳转。三字节指令。范围内跳转。三字节指令。2 2绝对转移指令绝对转移指令 AJMP addr11 ; PCPC+2, PCAJMP addr11 ; PCPC+2, PC10100 0addr11addr11 绝对转移指令先将绝对转移指令先将PCPC的内容加的内容加2 2,使,使PCPC指向本指令的下一条指令,指向本指令的下一条指令,然后把然后把addr11addr11送入送入PCPC的低的低1111位

53、,位,PCPC的高的高5 5位保持不变,形成新的位保持不变,形成新的PCPC值,实现程序的转移。本指令的转移范围为下一条指令地址所在值,实现程序的转移。本指令的转移范围为下一条指令地址所在2K2K页面之内。二字节指令。页面之内。二字节指令。3.2 指令系统简介353 3短转移指令短转移指令 SJMP relSJMP rel ; PCPC+2+rel; PCPC+2+rel 短转移指令首先将短转移指令首先将PCPC内容加内容加2(2(本指令长度为两字节本指令长度为两字节) ),再与,再与relrel相加相加形成转移目的地址,其中形成转移目的地址,其中relrel是是8 8位的补码表示的相对偏移量

54、。短转移位的补码表示的相对偏移量。短转移指令的转移范围是以本指令所在地址加指令的转移范围是以本指令所在地址加2 2为基准,向低地址转移为基准,向低地址转移128B128B,向高地址转移向高地址转移127B127B。二字节指令。二字节指令。4 4变址寻址转移指令变址寻址转移指令 JMP JMP A+DPTR ; PC(A)+(DPTR)A+DPTR ; PC(A)+(DPTR) 变址寻址转移指令是将累加器变址寻址转移指令是将累加器A A的值与的值与DPTRDPTR中的值相加所得的和装中的值相加所得的和装入入PCPC中,完成程序的转移。本指令常用于跳转表以实现多分支转移。中,完成程序的转移。本指令

55、常用于跳转表以实现多分支转移。363.2 指令系统简介MOV DPTR,#TAB ; 将将TAB所代表的地址送入所代表的地址送入DPTRMOV A,R0; 从从R0中取数中取数MOV B,#2 MUL AB ; A中的值乘中的值乘2JMP A+DPTR ; 跳转跳转TAB: AJMP S1 ; 跳转表格跳转表格 AJMP S2 AJMP S3 3.2 指令系统简介37二、条件转移指令(二、条件转移指令(8 8条)条) 条件转移指令是指当某种条件满足时转移进行,否则程序顺序执行。条件转移指令是指当某种条件满足时转移进行,否则程序顺序执行。1 1累加器判零条件转移指令累加器判零条件转移指令JZ r

56、elJZ rel ; A=0, PCPC+2+rel; A0, PCPC+2 ; A=0, PCPC+2+rel; A0, PCPC+2JNZ rel ; A0, PCPC+2+rel; A=0, PCPC+2JNZ rel ; A0, PCPC+2+rel; A=0, PCPC+2例:例:MOV A, R0MOV A, R0JZ L1JZ L1MOV R1, #00HMOV R1, #00HAJMP L2AJMP L2L1: MOV R1, #0FFHL1: MOV R1, #0FFHL2: SJMP L2L2: SJMP L2#0FFH , R0= #00H R1#00H , R0#00H

57、 3.2 指令系统简介382 2比较条件转移指令比较条件转移指令CJNE A, #data, rel CJNE A, #data, rel CJNE A, direct, relCJNE A, direct, relCJNE Rn, #data, re1CJNE Rn, #data, re1CJNE CJNE Ri, #data, relRi, #data, rel 这这4 4条指令都是三字节指令,条指令都是三字节指令, 都执行以下操作:都执行以下操作: (1)(1)若目的操作数源操作数,若目的操作数源操作数, 则则 PCPC+3 PCPC+3 , CYCY0 0 (2) (2)若目的操作数源

58、操作数,若目的操作数源操作数, 则则 PCPC+3+rel PCPC+3+rel , CYCY0 0 (3) (3)若目的操作数源操作数,若目的操作数源操作数, 则则 PCPC+3+rel PCPC+3+rel , CYCY1 1 CJNE R0, #10H, L1 CJNE R0, #10H, L1 MOV R1, #00H MOV R1, #00H AJMP L3 AJMP L3L1: JC L2L1: JC L2 MOV R1,#0AAH MOV R1,#0AAH AJMP L3 AJMP L3L2: MOV R1,#0FFHL2: MOV R1,#0FFHL3: SJMP L3L3:

59、SJMP L3#0AAH , R010H1#00H , R010H#0FFH , R010HR3.2 指令系统简介39 3 3减减1 1条件转移指令条件转移指令DJNZ Rn, relDJNZ Rn, rel ; RnRn-1 ; RnRn-1 ; ; 若若Rn=0, PCPC+2Rn=0, PCPC+2 ; ; 若若Rn0, PCPC+2+relRn0, PCPC+2+relDJNZ direct, rel ; (direct)(direct)-1DJNZ direct, rel ; (direct)(direct)-1 ; ; 若若(direct)=0, PCPC+3(direct)=0,

60、 PCPC+3 ; ; 若若(direct)0, PCPC+3+rel(direct)0, PCPC+3+rel 第一条指令是两字节指令,第二条指令是三字节指令都不影响第一条指令是两字节指令,第二条指令是三字节指令都不影响PSWPSW。这两条指令功能是先将操作数内容减。这两条指令功能是先将操作数内容减l l,然后判断,如果操作,然后判断,如果操作数不为零,则转移到指定单元,否则顺序执行。这两条指令常用于控数不为零,则转移到指定单元,否则顺序执行。这两条指令常用于控制程序的循环。制程序的循环。403.2 指令系统简介三、子程序调用及返回指令(三、子程序调用及返回指令(4 4条)条)1 1子程序的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论