单片机教程3-MCS-51指令系统ppt课件_第1页
单片机教程3-MCS-51指令系统ppt课件_第2页
单片机教程3-MCS-51指令系统ppt课件_第3页
单片机教程3-MCS-51指令系统ppt课件_第4页
单片机教程3-MCS-51指令系统ppt课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、3.1 概述7 7种寻址方式,种寻址方式,111111条指令条指令字节数字节数运算速度运算速度单字节指令:单字节指令:4949条条双字节指令:双字节指令:4545条条三字节指令:三字节指令:1717条条单周期指令:单周期指令:6464条条双周期指令:双周期指令:4545条条周围期指令:周围期指令: 2 2 条条第三章 MCS-51指令系统功能功能数据传送类:数据传送类:2929条条算术运算类:算术运算类:2424条条逻辑运算类:逻辑运算类:2424条条控制转移类:控制转移类:1717条条位操作类:位操作类: 1717条条常用符号Rn:任务存放器中的存放器R0、R1R7之一,Ri:任务存放器中的

2、存放器R0或R1#data:8位立刻数#data16:16位立刻数direct:片内RAM或SFR的地址8位间接寻址存放器Bit:片内RAM或SFR的位地址addr11:11位目的地址addr16:16位目的地址rel: 补码方式的8位地址偏移量。 偏移范围为-128127/:位操作指令中,该位求反后参与操作,不影响该位X:片内RAM的直接地址或存放器(X):相应地址单元中的内容:箭头左边的内容送入箭头右边的单元内 3.2 3.2 寻址方式寻址方式3.2.1 3.2.1 立刻寻址立刻寻址Immediate AddressingImmediate Addressing 操作数就包含在指令代码中,

3、在操作码之后,称为操作数就包含在指令代码中,在操作码之后,称为立刻数,用立刻数,用“表示。表示。 MCS-51MCS-51 如:如:MOV P1, #80HMOV P1, #80H MOV R7, #0F5H MOV R7, #0F5H MOV DPTR MOV DPTR,#1245H#1245H操作数存在程序存储器中 3.2.2 3.2.2 直接寻址直接寻址 Direct AddressingDirect Addressing直接运用数所在单元的地址找到了操作数,直接运用数所在单元的地址找到了操作数,所以称所以称这种方法为直接寻址。这种方法为直接寻址。操作数在操作数在SFRSFR、内部、内部

4、RAMRAM、位地址空间。、位地址空间。如:如: MOV AMOV A,00H00H MOV C MOV C,60H60H MOV A MOV A,0F0H0F0H3.2.3 存放器寻址存放器寻址 Register Addressing对选定的任务存放器对选定的任务存放器R0R0R7R7、累加器、累加器A A、通用存放器、通用存放器B B、地址存放器地址存放器DPTRDPTR中的数进展操作。中的数进展操作。 例:例:MOV AMOV A,R0R0;将;将R0R0任务存放器中的数据送到累加器任务存放器中的数据送到累加器A A中去。中去。提一个问题:我们知道,任务存放器就是内存单元提一个问题:我们

5、知道,任务存放器就是内存单元的一部分,假设我们选择任务存放器组的一部分,假设我们选择任务存放器组0 0,那么,那么R0R0就是就是RAMRAM的的00H00H单元,那么这样一来,单元,那么这样一来,MOV AMOV A,00H 00H 和和 MOV AMOV A,R0R0不就没什么区别了吗?不就没什么区别了吗? 确实,这两条指令执行的结果是完全一样的,确实,这两条指令执行的结果是完全一样的,都是将都是将00H00H单元中的内容送到单元中的内容送到A A中去,但是执行的过中去,但是执行的过程不同,执行第一条指令需求程不同,执行第一条指令需求2 2个机器周期,而第二个机器周期,而第二条那么只需求条

6、那么只需求1 1个机器周期,第一条指令变成最终的个机器周期,第一条指令变成最终的目的码要两个字节目的码要两个字节E5H 00HE5H 00H,而第二条那么只,而第二条那么只需一个字节需一个字节E8HE8H就可以了。就可以了。3.2.4 存放器间接寻址存放器间接寻址 Register Indirect Addressing把地址放在另外一个存放器中,根据这个存放器中的数值把地址放在另外一个存放器中,根据这个存放器中的数值决议该到哪个单元中取数据。决议该到哪个单元中取数据。 R0R0,R1-8R1-8位地址,片内低位地址,片内低128128字节或片外字节或片外DPTR-16DPTR-16位,片外位

7、,片外64KB64KB MCS-51 MCS-51如:如: MOV AMOV A,R0R0MOVX AMOVX A,R0R0MOVX AMOVX A,DPTRDPTR操作数在片内RAM中操作数在片外RAM中操作数在片外RAM中以以DPTRDPTR或或PCPC为基址存放器,累加器为基址存放器,累加器A A为变址存放器。把两为变址存放器。把两者内容相加,结果作为操作数的地址。者内容相加,结果作为操作数的地址。 常用于查表操作。常用于查表操作。 MCS-51MCS-51 MOVC A MOVC A, A+DPTR A+DPTR ;(A+DPTR) A (A+DPTR) A MOVC A MOVC A

8、, A+PCA+PC; PC+1 PCPC+1 PC,(A+PC)A(A+PC)A3.2.5 变址寻址变址寻址(基址基址+变址变址)Base-Register-plus-Index-Register-Indirect Addressing操作数在程序存储器中E0A程序存储区2040H 9320E0H 472041H DPH 20DPL 00ALU如:MOVC A,A+DPTR设DPTR=2000H,A=E0H20E0H47指令代码3.2.6 相对寻址相对寻址 将将PCPC中的当前内容与指令第二字节给出的数相加,结中的当前内容与指令第二字节给出的数相加,结 果作为跳转指令的转移地址转移目的地址。

9、果作为跳转指令的转移地址转移目的地址。 PCPC中的当前内容称为基地址本指令后的字节地址中的当前内容称为基地址本指令后的字节地址 指令第二字节给出的数据称为偏移量,指令第二字节给出的数据称为偏移量,1 1字节带符号数字节带符号数. . 常用于跳转指令。常用于跳转指令。 如如: JC 23H: JC 23H 假设假设C=0C=0,不跳转;,不跳转; C=1C=1,跳转,跳转. .Relative Addressing改动PC程序存储区ALU如:JC 231025H1000H 401025H 451001H 23 1024H 471002H 3023H1002H指令代码当前PC 对片内对片内RAM

10、RAM的位寻址区和某些可位寻址的特殊的位寻址区和某些可位寻址的特殊功能存放器进展位操作时的寻址方式。功能存放器进展位操作时的寻址方式。 如如: SETB 3DH; : SETB 3DH; 将将27H.527H.5位置位置1 1 CLR C CLR C ;CyCy位清位清0 03.2.7 3.2.7 位寻址位寻址 Bit AddressingBit Addressing操作数在片内RAM位地址区或SFR某些位中寻址方式涉及的存储器空间寻址方式涉及的存储器空间3.3 3.3 数据传送类指令数据传送类指令2929条条 Data Transfer InstructionData Transfer In

11、struction MCS-51 MCS-51 助记符:助记符: 助记符:助记符: MOVMOV、MOVXMOVX、MOVC MOVC XCH XCH、XCHDXCHD、SWAP SWAP PUSH PUSH、POP POP 源操作数寻址方式源操作数寻址方式5 5种:种: 立刻寻址、直接寻址、存放器寻址、立刻寻址、直接寻址、存放器寻址、 存放器间接寻址、变址寻址。存放器间接寻址、变址寻址。 目的操作数寻址方式目的操作数寻址方式3 3种:种: 直接寻址、存放器寻址、存放器间接寻址直接寻址、存放器寻址、存放器间接寻址 除了目的操作数为除了目的操作数为ACCACC的指令影响奇偶标志的指令影响奇偶标志

12、P P外,普外,普通不影响通不影响标志位。标志位。3.3.1 3.3.1 十六位数的传送指令十六位数的传送指令1 1条条MOV DPTRMOV DPTR,#data16#data1680518051是一种是一种8 8位机,这是独一的一条位机,这是独一的一条1616位立刻数传送指位立刻数传送指令。功能:将一个令。功能:将一个1616位的立刻数送入位的立刻数送入DPTRDPTR中去。其中中去。其中高高8 8位送入位送入DPHDPH,低,低8 8位送入位送入DPLDPL。 例:例:MOV DPTRMOV DPTR,#1234H#1234H执行完了之后执行完了之后DPHDPH中的值为中的值为12H12

13、H,DPLDPL中的值为中的值为34H34H。假设我们分别向假设我们分别向DPHDPH,DPLDPL送数,那么结果也一样。送数,那么结果也一样。 如下面两条指令:如下面两条指令: MOV DPHMOV DPH,#35H#35H MOV DPL MOV DPL,#12H#12H。 那么就相当于执行了那么就相当于执行了 MOV DPTRMOV DPTR,#3512H#3512H。3.3.2 3.3.2 累加器累加器A A与片外与片外RAMRAM之间的数据传送类指令之间的数据传送类指令(4(4条条) ) MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A阐明: 1

14、.在51中,与外部存储器RAM打交道的只可以是A累加器。一切需求送入外部RAM的数据必需求经过A送去,而一切要读入的外部RAM中的数据也必需经过A读入。 在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进展数据的传送,而外部那么不行。 比如,要将外部RAM中某一单元设为0100H单元的数据送入另一个单元设为0200H单元,也必需先将0100H单元中的内容读入A,然后再送到0200H单元中去。 2. 2.要读或写外部的要读或写外部的RAMRAM,当然也必需求知道,当然也必需求知道RAMRAM的地址,的地址,在后两条指令中,地址是被直接放在在后两条指令中,地址是被直接放在DPTRDPTR

15、中的。而前两条中的。而前两条指令,由于指令,由于RiRi即即R0R0或或R1R1只是只是8 8位的存放器,所以只提位的存放器,所以只提供低供低8 8位地址。高位地址。高8 8位地址由位地址由P2P2口来提供。口来提供。 3.3.运用时应先将要读或写的地址送入运用时应先将要读或写的地址送入DPTRDPTR或或RiRi中,然后中,然后再用读写命令。再用读写命令。 例:将外部例:将外部RAMRAM中中100H100H单元中的内容送入外部单元中的内容送入外部RAMRAM中中200H200H单元中。单元中。MOV DPTRMOV DPTR,#0100H#0100HMOVX AMOVX A,DPTRDPT

16、RMOV DPTRMOV DPTR,#0200H#0200HMOVX DPTRMOVX DPTR,A A3.3.3 读程序存储器指令读程序存储器指令2条条 MOVC A,A+DPTR MOVC A,A+PC 本组指令是将ROM中的数送入A中。本组指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格阐明:查找到的结果被放在A中,因此,本条指令执行前后,A 中的值不一定一样。例:有一个数在R0中,要求用查表的方法确定它的平方值此 数的取值范围是0-5MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR . ORG 0100HDB 0,1,4,9,16,25假设假设R

17、0中的值为中的值为2,那么最终地址为那么最终地址为100H+2为为102H,到到102H单元中找到单元中找到的是的是4。3.3.4 堆栈操作堆栈操作2条条PUSH direct PUSH direct ;SPSPSP+1SP+1,(SP)(SP)(direct)(direct)POP direct ; (direct) POP direct ; (direct) (SP), SP (SP), SPSP-1SP-1第一条为压入指令,就是将第一条为压入指令,就是将directdirect中的内容送入堆栈中,中的内容送入堆栈中,第二条为弹出指令,就是将堆栈中的内容送回到第二条为弹出指令,就是将堆栈中

18、的内容送回到directdirect中。中。例:例: MOV SPMOV SP,#5FH#5FH MOV A MOV A,#100#100 MOV B MOV B,#20#20 PUSH ACC PUSH ACC PUSH B PUSH B 那么执行第一条那么执行第一条PUSH ACCPUSH ACC指令是这样的:将指令是这样的:将SPSP中的值中的值加加1 1,即变为,即变为60H60H,然后将,然后将A A中的值送到中的值送到60H60H单元中,因此执单元中,因此执行完本条指令后,内存行完本条指令后,内存60H60H单元的值就是单元的值就是100100,同样,执行,同样,执行PUSH BP

19、USH B时,是将时,是将SP+1SP+1,即变为,即变为61H61H,然后将,然后将B B中的值送入到中的值送入到61H61H单元中,即执行完本条指令后,单元中,即执行完本条指令后,61H61H单元中的值变为单元中的值变为2020。1.1.给出每条指令执行后的结果给出每条指令执行后的结果 MOV 23H,#30HMOV 12H,#34HMOV R0,#23HMOV R7,12HMOV R1,#12HMOV A,R0MOV 34H,R1MOV 45H,34HMOV DPTR,#6712HMOV 12H,DPHMOV R0,DPLMOV A,R0;(23H)=30H;(12H)=34H;R0=2

20、3HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXDPHDPHDPLDPL45H45H34H34H23H23H12H12HR7R7R1R1R0R0XXXXXXXXXXXXXXXX30303434XXXXXXXX2323XXXXXXXXXXXXXXXX30303434343412122323676712123434343430303434343412122323676712123434343430306767343412121212;R7=34H;R1=12H;A=30H;(34H)=34H;(45H)=34H;DPTR=6712H;(12H)=67H;R0=12H;A

21、=67H内部RAM3.4 3.4 算术运算类指令算术运算类指令(24(24条条) ) Arithmetic Operations Arithmetic Operations 主要对主要对8 8位无符号数;也可用于带符号数运算。位无符号数;也可用于带符号数运算。 包括:加、减、乘、除、加包括:加、减、乘、除、加1 1、减、减1 1运算指令运算指令 影响影响PSWPSW有关位。有关位。 3.4.1 加法指令ADD AADD A,#data #data ; A AdataAdataAADD AADD A,direct direct ; A A(direct )A(direct )AADD AADD

22、A,Rn Rn ; A ARnARnAADD AADD A,Ri Ri ; A A(Ri)A(Ri)A用途:将用途:将A A中的值与源操作数所指内容相加,最终结果中的值与源操作数所指内容相加,最终结果 存在存在A A中。中。1.不带进位位的加法指令4条2.带进位位的加法指令4条ADDC AADDC A,RnRn; A ARnRnCYACYAADDC AADDC A,directdirect ; A A(direct )(direct )CYACYAADDC AADDC A,RiRi; A A(Ri)(Ri)CYACYAADDC AADDC A,#data#data; A AdatadataCY

23、ACYA用途:将用途:将A A中的值和其后面的值以及进位位中的值和其后面的值以及进位位C C中的值相加,中的值相加, 最终结果存在最终结果存在A A,常用于多字节数运算中。,常用于多字节数运算中。阐明:由于阐明:由于5151单片机是一种单片机是一种8 8位机,所以只能做位机,所以只能做8 8位的数学位的数学运算,但运算,但8 8位运算的范围只需位运算的范围只需02550255,这在实践任务中是不,这在实践任务中是不够的,因此就要进展扩展,普通是将够的,因此就要进展扩展,普通是将2 2个个8 8位位( (两字节两字节) )的数的数学运算合起来,成为一个学运算合起来,成为一个1616位的运算,这样

24、,可以表达的位的运算,这样,可以表达的数的范围就可以到达数的范围就可以到达065535065535。例: 先做先做67H+A0H=107H67H+A0H=107H,而,而107H107H显然超越了显然超越了0FFH0FFH,因此最终保管在因此最终保管在A A中的是中的是07H07H,而,而1 1那么到了那么到了PSWPSW中中的的CYCY位了。换言之,位了。换言之,CYCY就相当于是就相当于是100H100H。 然后再做然后再做10H + 30H + CY10H + 30H + CY,结果是,结果是41H41H,所以,所以最终的结果是最终的结果是4107H4107H。1067H+30A0H10

25、67H+30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H1067H30A0H30A0H4107H4107H设:1067H存在R1R0中, 30A0H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中。MOV A,R0ADD A,R2 ;R0+R2A和CYMOV R4,AMOV A,R1ADDC A,R3 ;R1+R3+CYA和CYMOV R5,A又例: 先做先做67H+20H=87H67H+20H=87H,没有超越,没有超越0FFH0FFH,因此最终,因此最终保管在保管在A A中的是中的是87H

26、87H,而,而PSWPSW中的中的CY=0CY=0。 然后再做然后再做10H + 30H + CY10H + 30H + CY,结果是,结果是40H40H,所以,所以最终的结果是最终的结果是4087H4087H。1067H+3020H1067H+3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H1067H3020H3020H4087H4087HDA ADA A在进展在进展BCDBCD码加法运算时,跟在码加法运算时,跟在ADDADD和和ADDCADDC指令指令之后,用于对累加器之后,用于对累加器A A中刚进

27、展的两个中刚进展的两个BCDBCD码的加法码的加法的结果进展十进制调整。的结果进展十进制调整。例:例:A=0001 0101BCDA=0001 0101BCD代表十进制数代表十进制数1515 ADD AADD A,#8#83. 十进制调整指令1条; A=1DH; A=1DH,按二进制规律加,按二进制规律加; A=23H; A=23H,按十进制规律加,按十进制规律加DA ADA A3.4.2 减法指令8条SUBB ASUBB A,RnRn ; A ARnRnCYACYASUBB ASUBB A,direct direct ; A A(direct )(direct )CYACYASUBB ASU

28、BB A,RiRi ; A A(Ri)(Ri)CYACYASUBB ASUBB A,#data#data; A AdatadataCYACYA将将A A中的值减去源操作数所指内容以及进位位中的值减去源操作数所指内容以及进位位C C中的中的值,最终结果存在值,最终结果存在A A中。中。如:如: SUBB ASUBB A,R2R2设:设: A=C9HA=C9H,R2=55HR2=55H,CY=1CY=1,执行指令之后,执行指令之后,A A中的值为中的值为73H73H。1. 带借位的减法指令4条阐明:没有不带借位的减法指令,假设需求做阐明:没有不带借位的减法指令,假设需求做不带位的减法指令在做第一次

29、相减时,只需将不带位的减法指令在做第一次相减时,只需将CYCY清零即可。清零即可。对带符号数,要留意对带符号数,要留意OVOV标志。标志。OV=1OV=1,出错。,出错。3.5 逻辑运算类指令24条主要用于对主要用于对2 2个操作数按位进展逻辑操作,结果送到个操作数按位进展逻辑操作,结果送到A A或直接寻址单元。或直接寻址单元。 主要操作主要操作 与、或、异或、移位、取反、清零等。与、或、异或、移位、取反、清零等。 对标志位的影响对标志位的影响 除了目的操作数为除了目的操作数为ACCACC的指令影响奇偶标志的指令影响奇偶标志P P外,外,普通不影响标志位。普通不影响标志位。Logic Oper

30、ations3.5.1 3.5.1 逻辑或指令逻辑或指令6 6条条ORL A,Rn ;ARnAORL A,direct ;A(direct)AORL A,Ri ;A(Ri)AORL A,#data;AdataAORL direct,A;(direct)A(direct)ORL direct,#data ;(direct)data(direct)影响影响P P标志标志例:例:71H和和56H相或:相或:01110001 71H 01010110 56H 01110111 即即77H后两条指令,假设直接地址为后两条指令,假设直接地址为I/OI/O端口,那么为端口,那么为“读读改写操作。改写操作。

31、OR Logic Instruction3.5.2 逻辑与指令 6条ANL A,Rn ;ARnAANL A,direct ;A(direct)AANL A,Ri ;A(Ri)AANL A,#data ;AdataAANL direct,A ;(direct)A(direct)ANL direct,#data ;(direct)data(direct)影响影响P P标志标志例:例:71H71H和和56H56H相与:相与:01110001 01110001 71H71H 01010110 01010110 56H56H 01010000 01010000 即即50H50H后两条指令,假设直接地址为

32、后两条指令,假设直接地址为I/OI/O端口,那么为端口,那么为“读读改写操作。改写操作。 ANd Logic Instruction例:例:71H71H和和56H56H相异或:相异或: 01110001 01110001 71H71H ) 01010110 ) 01010110 56H56H 3.5.2 逻辑异或指令6条XRL A,Rn ;A RnAXRL A,direct ;A (direct)AXRL A,Ri ;A (Ri)AXRL A,#data ;A dataAXRL direct,A ;(direct) A(direct)XRL direct,#data ;(direct) dat

33、a(direct)影响影响P标志标志00100111 00100111 即即27H27H后两条指令,假设直接地址为后两条指令,假设直接地址为I/OI/O端口,那么为端口,那么为“读读改写操作。改写操作。 eXclusive-oR Logic Instruction3.5.3 清0与取反指令2条取反:取反:CPL A CPL A ;/AA/AA例:假设例:假设A=5CHA=5CH,执行,执行CPL ACPL A 结果:结果:A=A3HA=A3H清清0 0:CLR ACLR A ;0A0AComPlement Logic OperationComPlement Logic Operation3.5

34、.4 循环移位指令4条RL ARR ARLC ARRC AA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后两条指令,影响后两条指令,影响P P标志和标志和CYCY。 Rotate Logic instruction例:假设假设A=5CHA=5CH,CY=1CY=1,执行,执行RLC ARLC A后,后, 对对RLCRLC、RRCRRC指令,在指令,在CY=0CY=0时时RLCRLC相当于乘以相当于乘以2 2RRCRRC相当于除以相当于除以2 2结果:结果:A=B9HA=B9H,CY=0CY=0,P=1P=10101 11000101 11001 11011 10011011

35、10010 0共有控制程序转移类指令共有控制程序转移类指令( (不包括位操作类的转移不包括位操作类的转移指令指令) )。此类指令普通不影响。此类指令普通不影响PSWPSW。包括以下类型:包括以下类型:无条件转移和条件转移无条件转移和条件转移相对转移和绝对转移相对转移和绝对转移长转移和短转移长转移和短转移调用与前往指令调用与前往指令 短转移类指令:短转移类指令:AJMP addr11AJMP addr11 长转移类指令:长转移类指令:LJMP addr16LJMP addr16 相对转移指令:相对转移指令:SJMP relSJMP rel 间接转移指令:间接转移指令:JMP A+DPTRJMP

36、A+DPTR1 1上面的前三条指令,统统了解成:上面的前三条指令,统统了解成:PCPC值改动,即值改动,即跳转到一个标号处。跳转到一个标号处。 那么他们的区别何在呢?那么他们的区别何在呢?跳转的范围不同。跳转的范围不同。 短转移类指令:短转移类指令:AJMP addr11AJMP addr11 长转移类指令:长转移类指令:LJMP addr16LJMP addr16 相对转移指令:相对转移指令:SJMP relSJMP rel转移范围:转移范围:2KB2KB64KB64KB-128+127-128+127指令构成不同。指令构成不同。 AJMPAJMP、LJMPLJMP后跟的是绝对地址,后跟的是

37、绝对地址, 而而SJMPSJMP后跟的是相对地址。后跟的是相对地址。 指令长度不同指令长度不同 原那么上,一切用原那么上,一切用SJMPSJMP或或AJMPAJMP的地方都可以用的地方都可以用 LJMPLJMP来替代。来替代。间接转移指令:间接转移指令:JMP A+DPTRJMP A+DPTR 这条指令的用途也是跳转,转到什么地方去呢?这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决议了。这可不能由标号简单地决议了。 转移地址由转移地址由A+DPTRA+DPTR构成,并直接送入构成,并直接送入PCPC。指令对指令对A A、DPTRDPTR和标志位均无影响。和标志位均无影响。 本

38、指令可替代众多的判别跳转指令,又称为散本指令可替代众多的判别跳转指令,又称为散转指令,多用于多分支程序构造中。转指令,多用于多分支程序构造中。2 2第四条指令与前三条指令相比有所不同第四条指令与前三条指令相比有所不同例:例: MOV DPTRMOV DPTR,#TAB #TAB ;将;将TABTAB代表的地址送入代表的地址送入DPTRDPTR JMP A+DPTR JMP A+DPTR ;跳转;跳转TAB: AJMP ROUT0 TAB: AJMP ROUT0 ;跳转;跳转ROUT0ROUT0开场的程序段开场的程序段TAB+2: AJMP ROUT1 TAB+2: AJMP ROUT1 ;跳转

39、;跳转ROUT1ROUT1开场的程序段开场的程序段TAB+4: AJMP ROUT2 TAB+4: AJMP ROUT2 ;跳转;跳转ROUT2ROUT2开场的程序段开场的程序段TAB+6: AJMP ROUT3 TAB+6: AJMP ROUT3 ;跳转;跳转ROUT3ROUT3开场的程序段开场的程序段 .ROUT0ROUT0: .ROUT1ROUT1: .ROUT2ROUT2: .ROUT3ROUT3:执行该段程序后,程序将根执行该段程序后,程序将根据据A A中的内容转移到不同的中的内容转移到不同的程序段去执行程序段去执行-散转。散转。A=0,A=0,转转ROUT0ROUT0A=2,A=2

40、,转转ROUT1ROUT1A=4,A=4,转转ROUT2ROUT2A=6,A=6,转转ROUT3ROUT3条件转移指令是指在满足一定条件时进展相对转条件转移指令是指在满足一定条件时进展相对转移,否那么程序继续执行本指令的下一条指令。移,否那么程序继续执行本指令的下一条指令。一、判一、判A内容能否为内容能否为0转移指令转移指令2条条 JZ rel JZ rel ;假设;假设A=0A=0,那么转移,否那么顺序执,那么转移,否那么顺序执行。行。 JNZ rel JNZ rel ;假设;假设A0A0,就转移。,就转移。转移到相对于当前转移到相对于当前PCPC值的值的8 8位移量的地址去。即:位移量的地

41、址去。即: 新的新的PCPC值值= =当前当前PC+PC+偏移量偏移量relrel我们在编写汇编言语源程序时,可以直接写成:我们在编写汇编言语源程序时,可以直接写成: JZ JZ 标号标号 ;即转移到标号处。;即转移到标号处。 MOV A MOV A,R0R0 JZ L1 JZ L1 MOV R1 MOV R1,#00H#00H AJMP L2 AJMP L2 L1: MOV R1 L1: MOV R1,#0FFH#0FFH L2: SJMP L2 L2: SJMP L2 END END 在执行上面这段程序前:假设在执行上面这段程序前:假设R0=0R0=0,结果,结果R1=0FFHR1=0FF

42、H。而假设。而假设R0R00 0,那么结果是,那么结果是R1=00HR1=00H。 把上面的那个例子中的把上面的那个例子中的JZJZ改成改成JNZJNZ,看看程序,看看程序执行的结果是什么执行的结果是什么? ? 假设假设R0=0R0=0,结果,结果R1=00HR1=00H。假设。假设R0 R0 0 0,结果是,结果是R1R1中的中的值为值为0FFH0FFH。CJNE ACJNE A,#data#data,rel rel CJNE ACJNE A,directdirect,relrelCJNE RnCJNE Rn,#data#data,relrelCJNE RiCJNE Ri,#data#dat

43、a,relrel此类指令的功能是将两个操作数比较,假设此类指令的功能是将两个操作数比较,假设两者相等,就顺序执行,假设不相等,就转两者相等,就顺序执行,假设不相等,就转移。移。同样地,运用时,我们可以将同样地,运用时,我们可以将relrel了解成标号,了解成标号,即:即:CJNE ACJNE A,#data#data,标号,标号CJNE ACJNE A,directdirect,标号,标号CJNE RnCJNE Rn,#data#data,标号,标号CJNE RiCJNE Ri,#data#data,标号,标号利用这些指令,可以判别两数能否相等。利用这些指令,可以判别两数能否相等。但有时还想得

44、知两数比较之后哪个大,哪个小,但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能:本条指令也具有这样的功能:假设两数不相等,那么假设两数不相等,那么CPUCPU还会用还会用CYCY进位位进位位来反映哪个数大,哪个数小。来反映哪个数大,哪个数小。假设前面的数大,那么假设前面的数大,那么CY=0CY=0,否那么,否那么CY=1CY=1。因此在程序转移后再次利用因此在程序转移后再次利用CYCY就可判别出哪个就可判别出哪个数大,哪个数小了。数大,哪个数小了。 MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 ;如R0=10H,那么不转移R1=00H; AJMP L3L

45、1:JC L2 ;如CY=1即 R010H,那么转移 AJMP L3L2:MOV R1,#0FFHL3:SJMP L3因此最终结果是:本程序执行前,假设R0=10H,那么R1=00H;假设R010H,那么R1=0AAH;假设R010H,那么R1=0FFH。DJNZ RnDJNZ Rn,relrelDJNZ directDJNZ direct,relrelDJNZDJNZ指令的执行过程是这样的指令的执行过程是这样的: :它将第一个参数中的值减它将第一个参数中的值减1 1,然后看这个值能否等于,然后看这个值能否等于0 0,假设等于,假设等于0 0,就往下执行,假设不等于,就往下执行,假设不等于0

46、0,就转移,就转移到第二个参数所指定的地方去。到第二个参数所指定的地方去。例:例: DJNZ 10HDJNZ 10H,LOOPLOOP . .LOOP: .LOOP: .例:例: MOV 23H,#0AHMOV 23H,#0AH CLR A CLR ALOOP: ADD A,23HLOOP: ADD A,23H DJNZ 23H,LOOP DJNZ 23H,LOOP SJMP $ SJMP $上述程序段的执行过程是:上述程序段的执行过程是:将将23H23H单元中的数延续相加,存至单元中的数延续相加,存至A A中,每加中,每加一次,一次, 23H23H单元中的数值减单元中的数值减1 1,直至减到

47、,直至减到0 0,共加共加23H23H次。次。一、调用指令一、调用指令2条条 LCALL addr16 LCALL addr16 ;长调用指令;长调用指令(3(3字节字节) ) ACALL addr11 ACALL addr11 ;短调用指令;短调用指令(2(2字节字节) )上面两条指令都是在主程序中调用子程序,两者的区别上面两条指令都是在主程序中调用子程序,两者的区别: :对短调用指令,被调用子程序入口地址必需与调用指令的对短调用指令,被调用子程序入口地址必需与调用指令的下一条指令的第一字节在一样的下一条指令的第一字节在一样的2KB2KB存储区之内。存储区之内。运用时可以用:运用时可以用:

48、LCALL LCALL 标号标号 ;标号表示子程序首地址;标号表示子程序首地址 ACALL ACALL 标号标号 来调用子程序。来调用子程序。指令的执行过程是:当前PC压栈,子程序首地址送 PC,实现转移。子程序执行完后必需回到主程序,如何子程序执行完后必需回到主程序,如何前往呢?只需执行一条前往指令就可以了。前往呢?只需执行一条前往指令就可以了。RETRET;子程序前往指令;子程序前往指令RETIRETI;中断子程序前往指令;中断子程序前往指令两者不能互换运用。两者不能互换运用。3.6.4 3.6.4 空操作指令空操作指令1 1条条 NOP空操作,就是什么事也不干,停一个周期,普通空操作,就

49、是什么事也不干,停一个周期,普通用作短时间的延时。用作短时间的延时。RET指令的执行过程是:堆栈栈顶内容2字节,调用时保管的当前PC值弹出给PC,实现前往。RETI指令除了具有RET指令的功能实现程序前往外,还有对中断优先级形状触发器的清零。3.7 3.7 位操作指令位操作指令 1717条条Boolean OperationsMCS-51MCS-51单片机的硬件构造中,有一个位处置器单片机的硬件构造中,有一个位处置器又称布尔处置器,它有一套位变量处置的指令集,又称布尔处置器,它有一套位变量处置的指令集,包括位变量传送、逻辑运算、控制程序转移等。包括位变量传送、逻辑运算、控制程序转移等。在在MC

50、S-51 MCS-51 中,有一部份中,有一部份RAMRAM和一部份和一部份SFRSFR是具有位是具有位寻址功能的。寻址功能的。位操作区:内部位操作区:内部RAMRAM的的20H-2FH20H-2FH这这1616个字节单元,个字节单元,即即128128个位单元个位单元( (位地址空间位位地址空间位00007FH)7FH);可以位寻址的特殊功能存放器:可以位寻址的特殊功能存放器:80318031中有一中有一些些SFRSFR是可以进展位寻址的,这些是可以进展位寻址的,这些SFRSFR的特点是的特点是其字节地址均可被其字节地址均可被8 8整除,整除, 如如A A累加器,累加器,B B存放存放器、器、PSWPSW、IPIP中断优先级控制存放器、中断优先级控制存放器、 IEIE中断允许控制存放器、中断允许控制存放器、SCONSCON串行口

温馨提示

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

评论

0/150

提交评论