第3章 80C51单片机指令系统_第1页
第3章 80C51单片机指令系统_第2页
第3章 80C51单片机指令系统_第3页
第3章 80C51单片机指令系统_第4页
第3章 80C51单片机指令系统_第5页
已阅读5页,还剩158页未读 继续免费阅读

下载本文档

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

文档简介

1、n标号必须以字母开头,后跟标号必须以字母开头,后跟1-81-8个数字、字母、下个数字、字母、下划线等,以冒号划线等,以冒号“:”:”结尾。结尾。n不能与系统保留字(指令助记符、汇编伪指令、不能与系统保留字(指令助记符、汇编伪指令、寄存器名等)相同。寄存器名等)相同。n在其它指令中可把标号作为操作数进行引用。在其它指令中可把标号作为操作数进行引用。【例例】【例例】合乎语法的有合乎语法的有:(:(1)()(2)()(5)()(7)ROMMOV R0,#20HMOV A,R0MOV R0,#80HMOV A,R0n! !变址寻址方式只能对变址寻址方式只能对程序存储器程序存储器ROMROM进行进行寻址

2、寻址. .n通常采用标号:通常采用标号:JMP LOOPJMP LOOP,不需计算。,不需计算。寻址方式对应的存储空间寻址方式对应的存储空间n按周期数分:按周期数分:n单周期单周期 64 64条条n双周期双周期 45 45条条n四周期四周期 2 2条条另,指行指令对标志位影响的表示符号为:另,指行指令对标志位影响的表示符号为:“”有影响,有影响,“”无影响无影响n对奇偶标志位对奇偶标志位P P有影响有影响n若要完成以下的数据传送,应如何用51指令来实现?nR7内容传送到R4n外部RAM 20H单元内容送R0nROM 2000H单元内容送R2n外部RAM 0456H的内容送外部RAM 0078H

3、单元。MOV R0, #30HMOV A, R0MOV R1, AMOV B, R1MOV R1, P1MOV A, R0MOV 10H, #20HMOV 30H, 10H数据存储空间从数据存储空间从0100H开始必然为外部数据存储器空间,此时要用开始必然为外部数据存储器空间,此时要用MOVX指令指令和和DPTR寻址方式对此单元进行操作。寻址方式对此单元进行操作。MOV DPTR,#0100H ;将外存储区地址给寄存器将外存储区地址给寄存器DPTRMOVX A,DPTR ;利用利用DPTR间接寻址的内容先传入间接寻址的内容先传入AMOV 30H,A ;再将再将A中内容送入片内中内容送入片内30

4、HMOV DPTR,#0102HMOVX A,DPTRMOV 32H,A外部数据存储空间要用外部数据存储空间要用MOVX指令和指令和DPTR或或Ri间址寻址方式对此单元内容间址寻址方式对此单元内容进行操作。进行操作。MOV R0,#40HMOV P2,#00HMOVX A,R0MOV P1,AMOV R0,#51HMOVX A,R0MOV P3,AMOV DPTR,#0040HMOVX A,DPTRMOV P1,AMOV DPTR,#0051HMOVX A,DPTRMOV P3,A或或【例例】分别用两条查表指令编写一段子程序,功能为:根分别用两条查表指令编写一段子程序,功能为:根据累加器据累加

5、器A A中的数(中的数(0 09 9之间)查找平方表,求出相应的平之间)查找平方表,求出相应的平方数,放在内部方数,放在内部RAMRAM的的3030h h单元中。单元中。【例例】利用利用XCH指令将指令将R3与与R4的内容交换数据。的内容交换数据。XCH A,R3XCH A,R4【例例】将将A与内部与内部RAM的的30H的内容交换数据。的内容交换数据。XCH A,30H【例例】将寄存器将寄存器DPH和和DPL内容交换一下。内容交换一下。XCH A,DPHXCH A,DPL【例例】使用使用SWAP指令将内存指令将内存33H中的两个中的两个BCD码交换位置。码交换位置。;(A)(R0)=(20H)

6、,(A)=75H,(20H)=3FH;(A)03 (R0)03,(A)=7FH, (20H)=35H;(A)03 (A)47,(A)=F7HPUSH 03H;R3内容入栈,内容入栈,03H是是R3的地址的地址PUSH 04H;R4内容入栈,内容入栈,04H是是R4的地址的地址POP 03H;弹出弹出R4的内容送入的内容送入R3中中POP 04H;弹出弹出R3内容送入内容送入R4中中若(若(SPSP)=26H=26H,(,(A A)=37H=37H,(,(DPTRDPTR)=0CFA8H=0CFA8H;执执行以下指令后,试指出行以下指令后,试指出SPSP、A A、DPTRDPTR的数值。的数值。

7、(SP)=26H,(A)=37H,(DPTR)=0CF37Hn加法指令的一个加数是加法指令的一个加数是A A,另一个源操作数可以,另一个源操作数可以是立即数、寄存器、直接、间接等寻址方式,相是立即数、寄存器、直接、间接等寻址方式,相加结果送回加结果送回A A。n影响标志位影响标志位CyCy、ACAC、OVOV、P P。n进位标志位参加运算。进位标志位参加运算。【例】若A=11010011,R1=11101000,执行指令ADD A,R1时,求其和。 11010011+ 11101000 1 10111011即相加后A=10111011,最前面的1丢失。若认为是无符号数相加,则A的值代表十进制数

8、187,若认为是带符号数相加,则A的值为十进制负数-69。【例例】若若A=01001001A=01001001,求执行指令,求执行指令ADD AADD A,#6BH#6BH的结果。的结果。n由于两个正数相加结果为负数,表示出现由于两个正数相加结果为负数,表示出现了溢出,故了溢出,故OV=1OV=1,但进位标志,但进位标志Cy=0Cy=0。01001001+0110101110110100n第第3 3位对于第位对于第4 4位有进位时,位有进位时,AC=1AC=1。n相加后相加后A A中的中的1 1的数目为偶数,故的数目为偶数,故P=0P=0。 01001001+0110101110110100例

9、例设(设(A)=53H,(,(R0)=0FCH,执行指令,执行指令ADD A,R0后,后,(A)=,CY=,AC=,OV=,P=例例设(设(A)=85H,(,(R0)=20H,(,(20H)=0AFH,执行,执行指令指令ADD A,R0后,(后,(A)=,CY=,AC=,OV=,P=(A)=4FH,CY=1,AC=0,OV=0,P=1(A)=34H,CY=1,AC=1,OV=1,P=1 01010011+ 11111100(1) 01001111 10000101+ 10101111(1)00110100将存储单元将存储单元40H与与50H内容相加的和存入内容相加的和存入60H单元,单元,即:

10、即:(40H) + (50H)(60H)。【例例】MOVA,40H ;A(40H),取第1个操作数到AADDA,50H ;A(A)+(50H),两个操作数和送AMOV60H,A ;60H(A),将运算和送60H单元此程序较简单,求和的方法与笔算雷同,先加低位,后加高此程序较简单,求和的方法与笔算雷同,先加低位,后加高位,无需画流程图。位,无需画流程图。R1R0+R3R2R2 R1R0对多字节的加法,存在最高位的进位问题。如果高位有进位,对多字节的加法,存在最高位的进位问题。如果高位有进位,则和的字节数要比加数或被加数的字节数多一个。则和的字节数要比加数或被加数的字节数多一个。【例例】假设假设X

11、 =2288HX =2288H已存入已存入41H41H与与40H40H单元,而单元,而Y=4488HY=4488H已存入已存入51H51H与与50H50H单元。编写单元。编写X+YX+Y的程序,并的程序,并将将X+YX+Y的和存入的和存入61H61H与与60H60H单元中。单元中。分成两个字节加,先加分成两个字节加,先加40H和和50H,再加,再加41H、51H和和Cy。 (41H)(40H) + (51H) (50H)Cy+(41H) +(51H) (40H)(50H)假设假设X =2288H已存入已存入41H与与40H单元,而单元,而Y=4488H已存入已存入51H与与50H单元。求单元。

12、求X+Y =?【例例】分成两个字节加,先加分成两个字节加,先加40H和和50H,再加,再加41H和和51H。运算结果为运算结果为X+Y=6610H,而正确运算结果为:,而正确运算结果为: X= 2288H+ Y = 4488HX+Y = 67 10H多字节加操作多字节加操作?n被加数在内部被加数在内部RAMRAM的的50H50H、51H51H和和52H52H单元中;单元中;加数在内部加数在内部RAMRAM的的53H53H、54H54H和和55H55H单元中;单元中;要求把相加之和存放在要求把相加之和存放在50H50H、51H51H和和52H52H单元单元中,进位存放在位寻址区的中,进位存放在位

13、寻址区的20H20H位中。位中。【例】试将数138和(A)=156的内容相加,并将结果存储到35H,36H单元中,编写程序并译成机器码,并指出每条指令执行后Cy、AC、OV、P标志各是什么?Cy=0、AC=0、OV=0、P=0Cy=1、AC=1、OV=1、P=1Cy、AC、OV、P不变不变Cy、AC、OV不变不变, P=0Cy=0、AC=0、OV=0、P=1Cy、AC、OV、P不变不变求补采用求补采用“模模-原码原码”的方法,因为补码是的方法,因为补码是原码相当于模而言的,原码相当于模而言的,对于双字节数来说其对于双字节数来说其模为模为10000H。ORG 1000HCLR C; Cy0CLR

14、 A; A0SUBB A,R0;低字节求补低字节求补MOV R2,A;送送R2CLR A; 0ASUBB A,R1;高字节求补高字节求补MOV R3,A;送送R3SJMP $END 123456 H+ 567890 H 68ACE6 H+ 006 660 H 691 246 H MOV A,#40HADD A,#52HMOV 30H,AMOV A,#E2HADDC A,#AAHMOV 31H,AMOV A,#01HADDC A,#08HMOV 32H,A采用BCD码,123456的BCD码是123456H,567890的BCD码是567890H。MOV A,#56HADD A,#90HDA A

15、MOV 30H,AMOV A,#34HADDC A,#78HDA A MOV 31H,AMOV A,#12HADDC A,#56HDA A MOV 32H,A如何修正?如何修正?CLR C;清进位位;清进位位MOV A,#9AH;SUBB A,#36H;求减数的补数;求减数的补数ADD A,91H;加补数完成减法;加补数完成减法DA A;十进制调整;十进制调整CLR C;舍弃进位;舍弃进位10011010-0011011001100100+1001000111110101+01100000 101010101舍弃进位后,差为十进制数舍弃进位后,差为十进制数55.乘、除指令都为一字节指令,需四个

16、机器周期。乘、除指令都为一字节指令,需四个机器周期。Cy 总是被清总是被清0;OV 若乘积大于若乘积大于255,则,则OV=0,表明乘机在,表明乘机在B和和A中;中;若乘机小于或等于若乘机小于或等于255,则,则OV=1,表明乘积在,表明乘积在A中,中,而而B为为0.Cy 总是被清总是被清0;OV 除数为除数为0,则,则OV=1,表明除法无意义;否则,表明除法无意义;否则OV=0.若被乘数为若被乘数为16位无符号数,乘数为位无符号数,乘数为8位无符号数,编制乘位无符号数,编制乘法程序。被乘数的地址为法程序。被乘数的地址为M(低(低8位)和位)和M+1(高(高8位),位),乘数地址为乘数地址为N

17、,积存入,积存入R2、R3和和R4三个寄存器中。三个寄存器中。【例例】2)再用)再用16位被乘数的高位被乘数的高8位乘以乘数,所得积的低位乘以乘数,所得积的低8位应与位应与R3中的暂存的内容相加,存入中的暂存的内容相加,存入R3的结果的一部分,而积的高的结果的一部分,而积的高8位还位还要与进位要与进位Cy相加才能存入相加才能存入R2,作为积的高,作为积的高8位。最后的积存于位。最后的积存于R2、R3、R4,共为,共为24位二进制数。位二进制数。【分析思路分析思路】1)将)将16位被乘数分为高位被乘数分为高8位和低位和低8位,首先由低位,首先由低8位与位与8位乘数相位乘数相乘,积的低乘,积的低8

18、位存入位存入R4,积的高,积的高8位暂存于位暂存于R3。MOV R0,#MMOV A,R0MOV B,NMUL ABMOV R4,AMOV R3,BINC R0MOV A,R0MOV B,NMUL ABADD A,R3MOV R3,AMOV A,BADDC A,#00HMOV R2,A8位无符号二进制数表示的数据范围为位无符号二进制数表示的数据范围为0-255,所以用,所以用BCD码,最多码,最多3位。可将被转换的数除以位。可将被转换的数除以100,得到百位数;余数再除以,得到百位数;余数再除以10得十位数;得十位数;最后余数即为个位数。最后余数即为个位数。设(设(20H)=0FFH,先用,先

19、用100除,商(除,商(A)=02H FIRST;余;余数(数(B)=37H,再用,再用10除,商(除,商(A)=05H,余数(,余数(B)=05H;十位十位BCD数送数送A高四位后,与个位高四位后,与个位BCD数相减,得到压缩的数相减,得到压缩的BCD码码55H SECOND。FIRST DATA 22HSECOND DATA 21HORG 1000HHBCD:MOV A,20H;取数取数MOV B,#100;B除数除数100DIV AB;除除100MOV FIRST,A;百位百位BCDMOV A,BMOV B,#10;B除数除数10DIV AB ;除除10SWAP A;十位数送高位十位数送

20、高位ORL A,B;A为(十位、个位)为(十位、个位)BCDMOV SECOND,A;存十位、个位数存十位、个位数SJMP $END以上几例都是简单程序,可以完成一些特定的功能,若以上几例都是简单程序,可以完成一些特定的功能,若在程序的第一条指令加上标号,程序结尾改用一条子程在程序的第一条指令加上标号,程序结尾改用一条子程序返回序返回RET指令,则这些可完成某种特定功能的程序段,指令,则这些可完成某种特定功能的程序段,均可当作子程序调用。均可当作子程序调用。【例例】设设(R0)=10H(R0)=10H,(10H)=15H(10H)=15H,(90H)=55H(90H)=55H,(B)=33H(

21、B)=33H,(R5)=57H(R5)=57H,试分析下列指令执行后各寄,试分析下列指令执行后各寄存器与存储单元的内容。存器与存储单元的内容。 MOVA,#30H ;(A)30HMOVA,R0 ;(A)(R0)=10HMOVA,90H ;(A)(90H)=55H MOVA,R0 ;(A)(R0)=(10H)=15H MOVR1,#40H ;(R1)40H MOVR2,A ;(R2)(A)=15HMOVR3,0F0H ;(R3)(0F0H)=(B)=33H MOV30H,#50H ;(30H)50HMOV00H,#10H ;(00H)=(R0)10HMOV0B0H,A ;(0B0H)=(P3)(

22、A)=15HMOVPSW,10H ;(PSW)=(0D0H)(10H)=15 MOV40H,R5 ;(40H)(R5)=57MOV7FH,R0 ;(7FH)(R0)=(10H)=15H MOV R0,#70H ;(R0)=(10H)70HMOV R1,A ;(R1)=(40H)(A)=15HMOV R0,90H ;(R0)=(60H)(90H)=55H MOVDPTR,#2000H ;(DPTR)2000H1MOV A,#1000H;A1000HMOV DPTR,#1000H MOV A,#10H2MOVX A,1000H ;A(1000H)片外片外RAMMOV DPTR,#1000HMOVX

23、 A,DPTRMOV P2,#10HMOV R0,#00HMOVX A,R0或或3MOVC A,1000H ;A(1000H) ROMMOV A,#00HMOV DPTR,#1000HMOVC A,A+DPTR4MOVX 60H,A;片外;片外RAM(60H)AMOV DPTR,#0060HMOVX DPTR,AMOV P2,#00HMOV R1,#60HMOVX R1,A或或5MOV R0,60H;片内片内RAM:61H(60H) MOV 61H,R06. XCH R1,R2;R1R27. MOVX DPTR,#2000H;DPTR2000H8. MOVX 60H,DPTR;片内片内RAM片

24、外片外RAM【例例】编写程序,把编写程序,把A中的高低半字节分别转换为中的高低半字节分别转换为ASCII码,并高位存入码,并高位存入R1,低位存入,低位存入R2。如:若(。如:若(A)=4AH,则(,则(R1)=34H,(,(R2)=41H。n逻辑运算指令,对逻辑运算指令,对Cy AC OVCy AC OV标志都没有影标志都没有影响,只在涉及到累加器响,只在涉及到累加器A A时,才会对奇偶标时,才会对奇偶标志志P P产生影响。产生影响。n这条指令用来修改一个输出口时,作为原这条指令用来修改一个输出口时,作为原始口数据的值将从输出口数据锁存器(始口数据的值将从输出口数据锁存器(P0-P0-P3P

25、3)读入,而不是读引脚状态。)读入,而不是读引脚状态。dataAAdataRiAARidirectAAdirectRnAARnAXRLORLANL)(;:)()(;:)()(;:)()(;,datadirectdirectdatadirectAdirectAdirectXRLORLANL)(:)(),ANL A,R1; A(A)(R1)ANL A,70H;A(A)(70H)ANL A,R0;A(A)(R0)ANL A,#07H; A(A)07HANL 70H,A;(70H)(70H)(A)ANL P1,#0F0H;(P1)(P1)0F0H【例】ORL A,R7; A(A)(R7)ORL A,7

26、0H; A(A)(70H)ORL A,R1; A(A)(R1)ORL A,#03H; A(A)03HORL 78H,A; (78H)(78H)(A)ORL 70H,#07FH ;(70H)(70H)07FHXRL A,R4; A(A)+(R4)XRL A,50H; A(A)+(50H)XRL A,R0; A(A)+(R0)XRL A,#00H; A(A)+00HXRL 30H,A;(30H)(30H)+(A)XRL 40H,#0F0H ;(40H)(40H)+0F0H【例例】设(设(A)=07H,(,(R0)=0FDH,执行指令,执行指令 ANL A,R0 后,结果:(后,结果:(A)= ,(

27、,(R0)= 。【例例】设(设(P1)=05H,(,(A)=33H,执行指令,执行指令ORL P1,A,结果:(,结果:(A)= ,(,(P1)= 。【例例】设(设(A)=90H,(,(R3)=73H,执行指令,执行指令XRL A,R3,结果,结果:(:(A)= ,(,(R3)= 。这种操作不便用简单的这种操作不便用简单的MOV指令来实现,而可以借助与、或逻辑运算。指令来实现,而可以借助与、或逻辑运算。或或位对位对1作异或操作运算,可取反。作异或操作运算,可取反。异或指令可对如何一个内部异或指令可对如何一个内部RAM单元取反。单元取反。异或运算有一个特性,即只要使某一单元的每一位都对异或运算有

28、一个特性,即只要使某一单元的每一位都对1作作异或运算,就可对这个单元的内容求反。异或运算,就可对这个单元的内容求反。MCS-51中只有对中只有对A的取反指令,没有求补指令。若要进行求补操作,可按的取反指令,没有求补指令。若要进行求补操作,可按“求求反加反加1”来进行。来进行。机器码:机器码:1111 0100机器码:机器码:1110 0100【例例】设(设(A)=10101010B,执行指令,执行指令CPL A之后,(之后,(A)=01010101B机器码:机器码:1100 0100SWAP A(高低半字节交换高低半字节交换)【例例】设(设(A)=0C5H,执行指令,执行指令SWAP A之后,

29、(之后,(A)=5CH对于对于Cy AC OV标志没有影响,只有涉及标志没有影响,只有涉及A时,才对奇偶标志位时,才对奇偶标志位P产生影响。产生影响。指令:指令:RL A ;RLC A ;RR A ;RRC A ;ACACAA机器码:机器码:0010 00110011 00110000 00110001 0011图示:图示:移位只能对于移位只能对于A进行进行利用为置位指令,可以完成利用为置位指令,可以完成16位数的循环移位。位数的循环移位。【例例】16位二进制数存于位二进制数存于30H和和31H单元,低单元,低8位先存,位先存,试编写完成一次循环移位的程序。试编写完成一次循环移位的程序。图图由

30、于需要移由于需要移位四次,故位四次,故安排了一个安排了一个循环程序。循环程序。每作一次循每作一次循环,对环,对DPTR循环左移一循环左移一次。次。如何指令系统都有控制转移指令,有了控制转移指令,程如何指令系统都有控制转移指令,有了控制转移指令,程序就有了思考判断能力。序就有了思考判断能力。机器码:机器码:0000 0010 a15a14a13a12 a11a10a9 a8 a7a6a5a4 a3a2a1a0机器码:a10a9a80 0001 a7a6a5a4 a3a2a1a0如果KWR=1030H,则执行该条指令后,程序转移到1100H如果KWR=3030H时,执行该条指令后,程序转移到310

31、0H。机器码:机器码:1000 0000 rel如果如果KRD标号值为标号值为0100H,则跳转的目标地址是,则跳转的目标地址是0123H0100H+2=0102H0102H+21H=0123H机器码:机器码:0111 0011机器码:机器码:0110 0000 rel机器码:机器码:0111 0000 relCJNE A,30H,NOTEQ ;(A)(30H),转EQ: ;(A)(30H)NOTEQ: JC LITTEL ;C=1,(A)(30H),则转向,则转向LOOP2,若,若A(30H)转转LOOP2JC LOOP3;A(30H),则转向,则转向LOOP2,若,若A(30H),则转向,

32、则转向LOOP3。1、首先判断操作数的正负。可以将操作数和立即数、首先判断操作数的正负。可以将操作数和立即数80H相与,若相与,若结果为零,则为正数,否则,就为负数。结果为零,则为正数,否则,就为负数。2、然后再用、然后再用CJNE指令和指令和JC (JNC)指令形成三个分支。指令形成三个分支。MOV R0,A;暂存暂存AANL A,#80H;判别判别A的正负的正负JNZ NEG;A0,则转,则转NEGMOV A,30H;A0,顺序执行,顺序执行ANL A,#80H;判别判别(30H)的正负的正负JNZ LOOP2;(30H)30HSJMP COMP;(30H) 0,转向,转向COMPNEG:

33、MOV A,30H;ANL A,#80H ;再次判别再次判别(30H)的正负的正负JZ LOOP3;(30H) 0,则,则A(30H)转转LOOP2JC LOOP3;A(30H)转转LOOP3JBC指令相当与两条指令的功能。指令相当与两条指令的功能。JB bit,NEXT NEXT: CLR bit【例例】判断累加器中数的正负,为负则跳转到判断累加器中数的正负,为负则跳转到NEG:ANL A,#80HJNZ NEG等价于:等价于:JB ACC.7,NEGMOV A,R0MOV R0,40HMOV 40H,AMOV R0,#40HMOV R0,A【例】设R0的内容为32H,A的内容为48H,内部RAM 32H内容的80H,40H内容为08H,请指出在执行下列程序段后各单元内容的变化。MOV A,R0MOV R0,40HMOV 40H,AMOV R0,#40HMOV R0,A XCH A, R0 ;(A)= ;(R0)= XCH A, 30H;(A)= ;(30H)= XCH A, R0;(A)=;(R0)= ;(30H)= XCHD A, R0;(A)=;(R0)= ;(30H)= SWAP A ;(A)= ADD A, R0;(A)= ;(Cy)= ;(OV)= ADD A, 30H;(A)= ;(Cy)= ;

温馨提示

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

评论

0/150

提交评论