51单片机中断汇编课件.ppt
3.1 概述概述7 7种寻址方式,种寻址方式,111111条指令条指令字节数字节数运算速度运算速度单字节指令:单字节指令:4949条条双字节指令:双字节指令:4545条条三字节指令:三字节指令:1717条条单周期指令:单周期指令:6464条条双周期指令:双周期指令:4545条条四周期指令:四周期指令:2 2 条条第三章 MCS-51指令系统 Instruction Set6/1/20236/1/20231 1功能功能数据传送类:数据传送类:2929条条算术运算类:算术运算类:2424条条逻辑运算类:逻辑运算类:2424条条控制转移类:控制转移类:1717条条位操作类:位操作类:17 17条条6/1/20236/1/20232 2常用符号Rn:工作寄存器中的寄存器Rn、R1R7之一,Ri:工作寄存器中的寄存器R0或R1#data:8位立即数#data16:16位立即数direct:片内RAM或SFR的地址(8位)间接寻址寄存器Bit:片内RAM或SFR的位地址addr11:11位目的地址addr16:16位目的地址6/1/20236/1/20233 3rel:补码形式的8位地址偏移量。偏移范围为-128127/:位操作指令中,该位求反后参与操作,不影响该位X:片内RAM的直接地址或寄存器(X):相应地址单元中的内容:箭头左边的内容送入箭头右边的单元内6/1/20236/1/20234 4 3.2 3.2 寻址方式寻址方式3.2.1 3.2.1 立即寻址立即寻址Immediate AddressingImmediate Addressing 操作数就包含在指令代码中,在操作码之后,称为操作数就包含在指令代码中,在操作码之后,称为立即数,用立即数,用“”表示。表示。MCS-51MCS-51 如:如:MOV P1,MOV P1,#80H#80H MOV R7,MOV R7,#0F5H#0F5H MOV DPTR MOV DPTR,#1245H#1245H操作数存在程序存储器中6/1/20236/1/20235 5 3.2.2 3.2.2 直接寻址直接寻址 Direct AddressingDirect Addressing直接使用数所在单元的直接使用数所在单元的地址地址找到了操作数,所以称找到了操作数,所以称这种方法为这种方法为直接寻址直接寻址。操作数在操作数在SFRSFR、内部内部RAMRAM、位地址位地址空间。空间。如:如:MOV A MOV A,00H00H MOV CMOV C,60H60H MOV AMOV A,0F0H0F0H6/1/20236/1/20236 63.2.3 寄存器寻址寄存器寻址 Register Addressing对选定的工作寄存器对选定的工作寄存器R0R0R7R7、累加器、累加器A A、通用寄存器、通用寄存器B B、地址寄存器地址寄存器DPTRDPTR中的数进行操作。中的数进行操作。例:例:MOV AMOV A,R0R0;将将R0R0工作寄存器中的数据送到累加器工作寄存器中的数据送到累加器A A中去。中去。提一个问题:提一个问题:我们知道,工作寄存器就是内存单元我们知道,工作寄存器就是内存单元的一部分,如果我们选择工作寄存器组的一部分,如果我们选择工作寄存器组0 0,则,则R0R0就就是是RAMRAM的的00H00H单元,那么这样一来,单元,那么这样一来,MOV AMOV A,00H00H 和和 MOV AMOV A,R0R0不就没什么区别了吗?不就没什么区别了吗?6/1/20236/1/20237 7 的确,这两条指令执行的结果是完全相同的,的确,这两条指令执行的结果是完全相同的,都是将都是将00H00H单元中的内容送到单元中的内容送到A A中去,但是执行的过中去,但是执行的过程不同,执行第一条指令需要程不同,执行第一条指令需要2 2个机器周期,而第二个机器周期,而第二条则只需要条则只需要1 1个机器周期,第一条指令变成最终的目个机器周期,第一条指令变成最终的目标码要两个字节(标码要两个字节(E5H 00HE5H 00H),而第二条则只要一个),而第二条则只要一个字节(字节(E8E8H H)就可以了。)就可以了。6/1/20236/1/20238 83.2.4 寄存器间接寻址寄存器间接寻址 Register Indirect Addressing把地址放在另外一个寄存器中,根据这个寄存器中的数值把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单元中取数据。决定该到哪个单元中取数据。R0R0,R1-R1-8-8位地址,位地址,片内片内低低128128字节或字节或片外片外DPTRDPTR-16-16位,片外位,片外64KB64KBv MCS-51MCS-51如:如:MOV AMOV A,R0R0MOVX AMOVX A,R0R0MOVX AMOVX A,DPTRDPTR操作数在片内RAM中操作数在片外RAM中操作数在片外RAM中6/1/20236/1/20239 9以以DPTRDPTR或或PCPC为基址寄存器,累加器为基址寄存器,累加器A A为变址寄存器。把两为变址寄存器。把两者内容相加,结果作为操作数的地址。者内容相加,结果作为操作数的地址。常用于查表操作。常用于查表操作。v MCS-51MCS-51 MOVCMOVC A A,A+DPTRA+DPTR ;(A+DPTR)A(A+DPTR)A MOVCMOVC A A,A+PCA+PC;PC+1 PCPC+1 PC,(A+PC)A(A+PC)A3.2.5 变址寻址变址寻址(基址基址+变址变址)Base-Register-plus-Index-Register-Indirect Addressing操作数在程序存储器中6/1/20236/1/20231010E0A程序存储区2040H 9320E0H 472041H DPH 20DPL 00ALU如:MOVC A,A+DPTR设DPTR=2000H,A=E0H20E0H47指令代码6/1/20236/1/202311113.2.6 相对寻址相对寻址 将将PCPC中的当前内容与指令中的当前内容与指令第二字节给出的数第二字节给出的数相加,结相加,结 果作为跳转指令的转移地址(转移目的地址)。果作为跳转指令的转移地址(转移目的地址)。PC PC中的中的当前当前内容称为内容称为基地址基地址(本指令后的字节地址)(本指令后的字节地址)指令第二字节给出的数据称为指令第二字节给出的数据称为偏移量偏移量,1 1字节带符号数字节带符号数.常用于跳转指令。常用于跳转指令。如如:JC 23H:JC 23H 若若C=0C=0,不跳转;,不跳转;C=1 C=1,跳转,跳转.Relative Addressing改变PC6/1/20236/1/20231212程序存储区ALU如:JC 231025H1000H 401025H 451001H 23 1024H 471002H 3023H1002H指令代码当前PC6/1/20236/1/20231313 对片内对片内RAMRAM的的位寻址区位寻址区和某些可和某些可位寻址位寻址的特殊功的特殊功能寄存器进行位操作时的寻址方式。能寄存器进行位操作时的寻址方式。如如:SETB 3DH;:SETB 3DH;将将27H.527H.5位置位置1 1 CLR C CLR C ;CyCy位清位清0 03.2.7 3.2.7 位寻址位寻址 Bit Addressing操作数在片内RAM位地址区或SFR某些位中6/1/20236/1/20231414寻址方式涉及的存储器空间寻址方式涉及的存储器空间寻址方式寻址方式寻址方式寻址方式寻址空间(操作数存放空间)寻址空间(操作数存放空间)寻址空间(操作数存放空间)寻址空间(操作数存放空间)立即寻址立即寻址立即寻址立即寻址程序存储器程序存储器程序存储器程序存储器直接寻址直接寻址直接寻址直接寻址片内片内片内片内RAMRAMRAMRAM低低低低128128128128字节、字节、字节、字节、SFRSFRSFRSFR寄存器寻址寄存器寻址寄存器寻址寄存器寻址工作寄存器工作寄存器工作寄存器工作寄存器R0R0R0R0R7,A,B,DPTRR7,A,B,DPTRR7,A,B,DPTRR7,A,B,DPTR寄存器间接寻址寄存器间接寻址寄存器间接寻址寄存器间接寻址片内片内片内片内RAM:R0,R1,SPRAM:R0,R1,SPRAM:R0,R1,SPRAM:R0,R1,SP片外片外片外片外RAM:R0,R1,DPTRRAM:R0,R1,DPTRRAM:R0,R1,DPTRRAM:R0,R1,DPTR变址寻址变址寻址变址寻址变址寻址程序存储器程序存储器程序存储器程序存储器:A+PC,A+DPTR:A+PC,A+DPTR:A+PC,A+DPTR:A+PC,A+DPTR相对寻址相对寻址相对寻址相对寻址程序存储器程序存储器程序存储器程序存储器256256256256字节范围内字节范围内字节范围内字节范围内:PC+:PC+:PC+:PC+偏移量偏移量偏移量偏移量位寻址位寻址位寻址位寻址片内片内片内片内RAMRAMRAMRAM的位寻址区的位寻址区的位寻址区的位寻址区(20H(20H(20H(20H2FH2FH2FH2FH字节地址字节地址字节地址字节地址)某些可位寻址的某些可位寻址的某些可位寻址的某些可位寻址的SFRSFRSFRSFR6/1/20236/1/202315153.3 3.3 数据传送类指令数据传送类指令(2929条)条)Data Transfer InstructionData Transfer Instruction MCS-51 MCS-51 助记符:助记符:助记符:助记符:MOV MOV、MOVXMOVX、MOVC MOVC XCH XCH、XCHDXCHD、SWAP SWAP PUSH PUSH、POP POP v 源操作数寻址方式(源操作数寻址方式(5 5种)种):立即寻址、直接寻址、寄存器寻址、立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址。寄存器间接寻址、变址寻址。v 目的操作数寻址方式(目的操作数寻址方式(3 3种)种):直接寻址、寄存器寻址、寄存器间接寻址直接寻址、寄存器寻址、寄存器间接寻址 除了目的操作数为除了目的操作数为ACCACC的指令影响奇偶标志的指令影响奇偶标志P P外,一般不影响外,一般不影响标志位。标志位。6/1/20236/1/202316163.3.1 3.3.1 十六位数的传递指令十六位数的传递指令(1条)MOV DPTRMOV DPTR,#data16data1680518051是一种是一种8 8位机,这是唯一的一条位机,这是唯一的一条1616位位立即数传递指立即数传递指令。功能:将一个令。功能:将一个1616位的立即数送入位的立即数送入DPTRDPTR中去。其中中去。其中高高8 8位送入位送入DPHDPH,低,低8 8位送入位送入DPLDPL。例:例:MOV DPTRMOV DPTR,#1234H#1234H执行完了之后执行完了之后DPHDPH中的值为中的值为12H12H,DPLDPL中的值为中的值为34H34H。如果我们分别向如果我们分别向DPHDPH,DPLDPL送数,则结果也一样。送数,则结果也一样。如下面两条指令:如下面两条指令:MOV DPH MOV DPH,#35H#35H MOV DPL MOV DPL,#12H#12H。则就相当于执行了则就相当于执行了 MOV DPTR MOV DPTR,#3512H#3512H。6/1/20236/1/202317173.3.2 3.3.2 累加器累加器A A与片外与片外RAMRAM之间的数据传递类指令之间的数据传递类指令(4(4条条)MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A说明:1.在51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行。比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。6/1/20236/1/20231818 2.2.要读或写外部的要读或写外部的RAMRAM,当然也必须要知道,当然也必须要知道RAMRAM的地址,的地址,在后两条指令中,地址是被直接放在在后两条指令中,地址是被直接放在DPTRDPTR中的。而前两条中的。而前两条指令,由于指令,由于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,DPTRDPTRMOV DPTRMOV DPTR,#0200H#0200HMOVX DPTRMOVX DPTR,A A6/1/20236/1/202319193.3.3 读程序存储器指令读程序存储器指令(2条)条)MOVC A,A+DPTR MOVC A,A+PC 本组指令是将ROM中的数送入A中。本组指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格说明:查找到的结果被放在A中,因此,本条指令执行前后,A 中的值不一定相同。例:有一个数在R0中,要求用查表的方法确定它的平方值(此 数的取值范围是0-5)MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR.ORG 0100HDB 0,1,4,9,16,25如果如果R0中的值为中的值为2,则最终地址为则最终地址为100H+2为为102H,到到102H单元中找到单元中找到的是的是4。6/1/20236/1/202320203.3.4 堆栈操作堆栈操作(2 2条)条)PUSH directPUSH direct ;SPSP+1,(SP)(direct)POP directPOP direct ;(direct)(SP),SPSP-1第一条为压入指令,就是将direct中的内容送入堆栈中,第二条为弹出指令,就是将堆栈中的内容送回到direct中。例例:MOV SP MOV SP,#5FH#5FH MOV A MOV A,#100#100 MOV B MOV B,#20#20 PUSH ACCPUSH ACC PUSH B PUSH B 则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后,内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20。6/1/20236/1/202321211 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=23HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXDPHDPHDPLDPL45H45H34H34H23H23H12H12HR7R7R1R1R0R0XXXXXXXXXXXXXXXX30303434XXXXXXXX2323XXXXXXXXXXXXXXXX30303434343412122323676712123434343430303434343412122323676712123434343430306767343412121212;R7=34H;R1=12H;A=30H;(34H)=34H;(45H)=34H;DPTR=6712H;(12H)=6767H;R0=1212H;A=6767H内部RAM6/1/20236/1/202322223.4 3.4 算术运算类指令算术运算类指令(2424条条)Arithmetic OperationsArithmetic Operations 主要对主要对8 8位无符号数;也可用于带符号数运算。位无符号数;也可用于带符号数运算。包括:加、减、乘、除、加包括:加、减、乘、除、加1 1、减、减1 1运算指令运算指令 影响影响PSWPSW有关位。有关位。6/1/20236/1/202323233.4.1 加法指令ADD AADD A,#datadata ;AdataAADD AADD A,direct direct;A(direct)AADD AADD A,RnRn ;ARnAADD AADD A,Ri Ri;A(Ri)A用途:用途:将将A A中的值与源操作数所指内容相加,最终结果中的值与源操作数所指内容相加,最终结果 存在存在A A中。中。1.不带进位位的加法指令(4 4条)条)6/1/20236/1/202324242.带进位位的加法指令(4 4条)条)ADDC AADDC A,RnRn;A ARnRnCYCYAAADDC AADDC A,directdirect;A A(direct)(direct)CYACYAADDC AADDC A,RiRi;A A(Ri)(Ri)CYACYAADDC AADDC A,#datadata;A AdatadataCYACYA用途:用途:将将A A中的值和其后面的值以及进位位中的值和其后面的值以及进位位C C中的值相加,中的值相加,最终结果存在最终结果存在A A,常用于多字节数运算中。,常用于多字节数运算中。说明:说明:由于由于5151单片机是一种单片机是一种8 8位机,所以只能做位机,所以只能做8 8位的数学位的数学运算,但运算,但8 8位运算的范围只有位运算的范围只有0 0255255,这在实际工作中是不,这在实际工作中是不够的,因此就要进行扩展,一般是将够的,因此就要进行扩展,一般是将2 2个个8 8位位(两字节两字节)的数的数学运算合起来,成为一个学运算合起来,成为一个1616位的运算,这样,可以表达的位的运算,这样,可以表达的数的范围就可以达到数的范围就可以达到0 06553565535。6/1/20236/1/20232525例:先做先做67H+A0H=107H67H+A0H=107H,而,而1 107H07H显然超过了显然超过了0FF0FFH H,因此最终保存在,因此最终保存在A A中的是中的是07H07H,而,而1 1则到了则到了PSWPSW中中的的CYCY位了。换言之,位了。换言之,CYCY就相当于是就相当于是100H100H。然后再做然后再做10H+30H+10H+30H+CYCY,结果是,结果是41H41H,所以,所以最终的结果是最终的结果是4107H4107H。1067H+30A0H1067H+30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H1067H30A0H30A0H4107H4107H6/1/20236/1/20232626设: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,A6/1/20236/1/20232727又例:先做先做67H+20H=87H67H+20H=87H,没有超过,没有超过0FF0FFH H,因此最终,因此最终保存在保存在A A中的是中的是87H87H,而,而PSWPSW中的中的CY=0CY=0。然后再做然后再做10H+30H+10H+30H+CYCY,结果是,结果是40H40H,所以,所以最终的结果是最终的结果是4087H4087H。1067H+3020H1067H+3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H1067H3020H3020H4087H4087H6/1/20236/1/20232828DA ADA A在进行在进行BCDBCD码加法运算时,跟在码加法运算时,跟在ADDADD和和ADDCADDC指令指令之后,用于对累加器之后,用于对累加器A A中刚进行的两个中刚进行的两个BCDBCD码的加法码的加法的结果进行十进制调整。的结果进行十进制调整。例:例:A=0001 0101BCDA=0001 0101BCD(代表十进制数(代表十进制数1515)ADD A ADD A,#8#83.十进制调整指令(1 1条)条);A=1DH;A=1DH,按二进制规律加,按二进制规律加;A=23H;A=23H,按十进制规律加,按十进制规律加DA ADA A6/1/20236/1/20232929 调整要完成的任务是:调整要完成的任务是:(1)当累加器)当累加器A中的中的低低4位数出现了非位数出现了非BCD码(码(10101111)或低)或低4位产生进位产生进位(位(AC=1),则应在低),则应在低4位加位加6调整,以调整,以产生低产生低4位正确的位正确的BCD结果。结果。(2)当累加器)当累加器A中的中的高高4位位数出现了非数出现了非BCD码(码(10101111)或高)或高4位产生进位位产生进位(CY=1),则应在高),则应在高4位加位加6调整,以产生调整,以产生高高4位正确的位正确的BCD结果。结果。十进制调整指令执行后,十进制调整指令执行后,PSW中的中的CY表表示结果的百位值示结果的百位值。6/1/20236/1/20233030例例例例 若(若(若(若(A A)0101 0110B0101 0110B,表示的,表示的,表示的,表示的BCDBCD码为码为码为码为5656,(R3R3)0110 0111B0110 0111B,表示的,表示的,表示的,表示的BCDBCD码为码为码为码为6767,(,(,(,(CYCY)0 0。执行以下指令:执行以下指令:执行以下指令:执行以下指令:ADD AADD A,R2R2DA ADA A由于(由于(由于(由于(A A)0010 0011B0010 0011B,即,且(,即,且(,即,且(,即,且(CYCY)1 1,即,即,即,即结果为结果为结果为结果为BCDBCD数数数数123123。应该注意,应该注意,应该注意,应该注意,DADA指令不能对减法进行十进制调整。指令不能对减法进行十进制调整。指令不能对减法进行十进制调整。指令不能对减法进行十进制调整。6/1/20236/1/202331313.4.2 减法指令(8 8条)条)SUBB ASUBB A,RnRn ;A ARnRnCYCYAASUBB ASUBB A,direct direct ;A A(direct)(direct)CYACYASUBB ASUBB A,RiRi ;A A(Ri)(Ri)CYCYAASUBB ASUBB A,#datadata;A AdatadataCYACYA将将A A中的值减去源操作数所指内容以及进位位中的值减去源操作数所指内容以及进位位C C中的中的值,最终结果存在值,最终结果存在A A中。中。如:如:SUBB ASUBB A,R2R2设:设:A=C9H A=C9H,R2=55HR2=55H,CY=1CY=1,执行指令之后,执行指令之后,A A中的值为中的值为73H73H。1.带借位的减法指令(4 4条)条)6/1/20236/1/20233232说明说明:没有不带借位的减法指令没有不带借位的减法指令,如果需要做,如果需要做不不带位的减法指令(在做第一次相减时),只要将带位的减法指令(在做第一次相减时),只要将CYCY清零清零即可。即可。对带符号数,要注意对带符号数,要注意OVOV标志。标志。OV=1OV=1,出错出错。6/1/20236/1/202333333.5 逻辑运算类指令(2424条)条)主要用于对主要用于对2 2个操作数按个操作数按位进行逻辑位进行逻辑操作,结果送到操作,结果送到A A或直接寻址单元。或直接寻址单元。v 主要操作主要操作 与、或、异或、移位、取反、清零等。与、或、异或、移位、取反、清零等。v 对标志位的影响对标志位的影响 除了目的操作数为除了目的操作数为ACCACC的指令影响奇偶标志的指令影响奇偶标志P P外,外,一般不影响标志位。一般不影响标志位。Logic Operations6/1/20236/1/202334343.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端口,则为端口,则为“读改读改写写”操作。操作。OR Logic Instruction6/1/20236/1/202335353.5.2 逻辑与指令(6 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后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则为端口,则为“读改读改写写”操作。操作。ANd Logic Instruction6/1/20236/1/20233636例:例:71H71H和和56H56H相异或:相异或:01110001 01110001(71H71H))01010110)01010110(56H56H)3.5.2 逻辑异或指令(6 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)data(direct)影响影响P标志标志00100111 00100111 即即27H27H后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则为端口,则为“读改读改写写”操作。操作。eXclusive-oR Logic Instruction6/1/20236/1/202337373.5.3 清清0 0与与取反指令(2 2条)条)取反:取反:CPL A CPL A;/AA/AA例:例:若若A=5CHA=5CH,执行,执行CPL ACPL A 结果:结果:A=A3HA=A3H清清0 0:CLR ACLR A ;0A0AC ComomP Plement lement L Logic Operationogic Operation6/1/20236/1/202338383.5.4 循环移位指令(4 4条)条)RL ARR ARLC ARRC AA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后两条指令,影响后两条指令,影响P P标志和标志和CYCY。Rotate Logic instruction6/1/20236/1/20233939例:若若A=5CHA=5CH,CY=1CY=1,执行,执行RLC ARLC A后,后,v 对对RLCRLC、RRCRRC指令,在指令,在CY=0CY=0时时RLCRLC相当于相当于乘乘以以2 2RRCRRC相当于相当于除除以以2 2结果:结果:A=B9HA=B9H,CY=0CY=0,P=1P=10101 11000101 11001 11011 10011011 10010 06/1/20236/1/202340403.6 控制转移类指令(1717条条)Branching InstructionBranching Instruction共有控制程序转移类指令共有控制程序转移类指令(不包括位操作类的转移不包括位操作类的转移指令指令)。此类指令一般不影响。此类指令一般不影响PSWPSW。包括以下类型:包括以下类型:无条件转移和条件转移无条件转移和条件转移相对转移和绝对转移相对转移和绝对转移长转移和短转移长转移和短转移调用与返回指令调用与返回指令6/1/20236/1/202341413.6.13.6.1 无条件转移类指令无条件转移类指令(4条)短转移类指令:短转移类指令:AJMP AJMP addr11addr11 长转移类指令:长转移类指令:LJMP LJMP addr16addr16 相对转移指令:相对转移指令:SJMP SJMP relrel 间接转移指令:间接转移指令:JMP JMP A+DPTRA+DPTR(1 1)上面的前三条指令,统统理解成:上面的前三条指令,统统理解成:PCPC值改变,即值改变,即跳转到一个标号处。跳转到一个标号处。那么他们的区别何在呢?那么他们的区别何在呢?6/1/20236/1/20234242v跳转的范围不同。跳转的范围不同。短转移类指令:短转移类指令:AJMP AJMP addr11addr11 长转移类指令:长转移类指令:LJMP LJMP addr16addr16 相对转移指令:相对转移指令:SJMP SJMP relrel转移范围转移范围:2KB2KB64KB64KB-128-128+127+127v指令构成不同。指令构成不同。AJMPAJMP、LJMPLJMP后跟的是后跟的是绝对地址绝对地址,而而SJMPSJMP后跟的是后跟的是相对地址相对地址。v指令长度不同指令长度不同v 原则上,所有用原则上,所有用SJMPSJMP或或AJMPAJMP的地方都可以用的地方都可以用 LJMPLJMP来替代。来替代。6/1/20236/1/20234343间接转移指令:间接转移指令:JMP JMP A+DPTRA+DPTR 这条指令的用途也是跳转,转到什么地方去呢这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。?这可不能由标号简单地决定了。转移地址由转移地址由A+DPTRA+DPTR形成,并直接送入形成,并直接送入PCPC。指令对指令对A A、DPTRDPTR和标志位均无影响和标志位均无影响。本指令可代替众多的判别跳转指令,又称为本指令可代替众多的判别跳转指令,又称为散散转指令转指令,多用于多分支程序结构中。,多用于多分支程序结构中。(2 2)第四条指令与前三条指令相比有所不同第四条指令与前三条指令相比有所不同6/1/20236/1/20234444例例:MOV DPTR MOV DPTR,#TAB#TAB;将;将TABTAB代表的地址送入代表的地址送入DPTRDPTR JMP A+DPTR JMP A+DPTR ;跳转;跳转TAB:AJMP ROUT0 TAB:AJMP ROUT0 ;跳转;跳转ROUT0ROUT0开始的程序段开始的程序段TAB+2:AJMP ROUT1 AJMP ROUT1 ;跳转;跳转ROUT1ROUT1开始的程序段开始的程序段TAB+4:AJMP ROUT2 AJMP ROUT2 ;跳转;跳转ROUT2ROUT2开始的程序段开始的程序段TAB+6:AJMP ROUT3 AJMP ROUT3 ;跳转;跳转ROUT3ROUT3开始的程序段开始的程序段 .ROUT0ROUT0:.ROUT1ROUT1:.ROUT2ROUT2:.ROUT3ROUT3:执行该段程序后,程序将根执行该段程序后,程序将根据据A A中的内容转移到不同的中的内容转移到不同的程序段去执行程序段去执行-散转。散转。A=0,A=0,转转ROUT0ROUT0A=2,A=2,转转ROUT1ROUT1A=4,A=4,转转ROUT2ROUT2A=6,A=6,转转ROUT3ROUT36/1/20236/1/202345453.6.2 3.6.2 条件转移指令条件转移指令(8条)条件转移指令是指在满足一定条件转移指令是指在满足一定条件条件时进行时进行相对转相对转移移,否则程序继续执行,否则程序继续执行本指令的本指令的下一条指令。下一条指令。一、判一、判A内容是否为内容是否为0转移指令转移指令(2条)条)JZ JZ rel rel ;如果;如果A=0A=0,则转移,否则顺序执行。,则转移,否则顺序执行。JNZ JNZ rel rel ;如果;如果A0A0,就转移。,就转移。转移到相对于当前转移到相对于当前PCPC值的值的8 8位移量的地址去。即:。即:新的新的PCPC值值=当前当前PC+PC+偏移量偏移量relrel我们在编写汇编语言源程序时,可以直接写成:我们在编写汇编语言源程序时,可以直接写成:JZ JZ 标号标号 ;即转移到标号处。;即转移到标号处。6/1/20236/1/20234646例:MOV A MOV A,R0R0 JZ L1JZ L1 MOV R1 MOV R1,#00H#00H AJMP L2 AJMP L2 L1 L1:MOV R1:MOV R1,#0FFH#0FFH L2L2:SJMP L2:SJMP L2 END END 在执行上面这段程序前:如果在执行上面这段程序前:如果R0=0R0=0,结果,结果R1=0FFHR1=0FFH。而如果而如果R0R0 0 0,则结果是,则结果是R1=00HR1=00H。把上面的那个例子中的把上面的那个例子中的JZJZ改成改成JNZJNZ,看看程序执行的,看看程序执行的结果是什么结果是什么?如果如果R0=0R0=0,结果,结果R1=00HR1=00H。如果。如果R0 R0 0 0,结果是,结果是R1R1中的中的值为值为0FFH0FFH。6/1/20236/1/20234747二、比较不等转移指令二、比较不等转移指令(4条)CJNE ACJNE A,#datadata,relrel CJNE ACJNE A,directdirect,relrelCJNE RnCJNE Rn,#datadata,relrelCJNE CJNE RiRi,#datadata,relrel此类指令的功能是将两个操作数比较,如果两者此类指令的功能是将两个操作数比较,如果两者相等相等,就,就顺序执行顺序执行,如果,如果不相等不相等,就,就转移转移。同样地,使用时,我们可以将同样地,使用时,我们可以将relrel理解成标号,即:理解成标号,即:CJNE ACJNE A,#data#data,标号,标号CJNE ACJNE A,directdirect,标号,标号CJNE RnCJNE Rn,#data#data,标号,标号CJNE RiCJNE Ri,#data#data,标号,标号6/1/20236/1/20234848利用这些指令,可以