1、2024/8/8 周四1第第3 3章章MSC-51MSC-51单片机指令系统单片机指令系统本章主要内容本章主要内容 MCS-51单片机的指令格式 MCS-51单片机的寻址方式 MCS-51单片机指令寻址方式寻址方式寻址方式寻址方式:如何找到存放操作数的地址,把操作数提取出来的方法。寻寻址址方方式式立即寻址方式立即寻址方式直接寻址方式直接寻址方式寄存器寻址方式寄存器寻址方式寄存器间接寻址方式寄存器间接寻址方式基址加变寻址方式基址加变寻址方式位寻址方式位寻址方式相对寻址方式相对寻址方式本章主要内容本章主要内容 MCS-51单片机的指令格式 MCS-51单片机的寻址方式 MCS-51单片机指令MCS
2、51指令分类指令分类1.数据传送指令2.算术运算指令3.逻辑运算及移位指令4.控制转移指令5.位操作指令(布尔操作)数据传送指令数据传送指令 内部RAM数据传送指令 片外数据存储器与累加器A之间的传送指令 程序存储器向累加器A传送指令 内部内部RAM数据传送指令数据传送指令1.通用传送指令通用传送指令MOV指令功能:把源操作数所表示的数据传送到目的地址指令功能:把源操作数所表示的数据传送到目的地址指定的存储单元之中,而不改变源操作数。即该指令指定的存储单元之中,而不改变源操作数。即该指令是是“复制复制”,不是,不是“搬家搬家”。指令格式:指令格式:MOV ,2)以以Rn为目的地址的指令为目的
3、地址的指令 MOV Rn,A ;(Rn)(A)MOV Rn,direct ;(Rn)(direct)MOV Rn,#data ;(Rn)data1)以累加器以累加器A为目的地址的指令为目的地址的指令 MOV A,Rn ;(A)(Rn)MOV A,direct ;(A)(direct)MOV A,Ri ;(A)(Ri)MOV A,#data ;(A)data 通用传送指令通用传送指令MOV4)以寄存器间接地址为目的的地址的指令以寄存器间接地址为目的的地址的指令 MOV Ri,A ;(Ri)(A)MOV Ri,direct ;(Ri)(direct)MOV Ri,#data ;(Ri)data3)
4、以直接地址为目的地址的指令以直接地址为目的地址的指令 MOV direct,A ;(direct)(A)MOV direct,Rn ;(direct)(Rn)MOV direct,direct;(direct)(direct)MOV direct,Ri ;(direct)(Ri)MOV direct,#data ;(direct)data 5)16位数据传送指令位数据传送指令 MOV DPTR,#data16 ;(DPTR)data16 ;(DPL)data70 ;(DPH)data158 通用传送指令通用传送指令MOVMOV指令指令8位数据传送路线示意图位数据传送路线示意图通用传送指令通用传
5、送指令MOV【例例】设设RAM RAM 40H40H单单元元的的内内容容为为80H80H,80H80H单单元元内内容容为为47H47H,P P1 1口口的的输输入入状状态态为为0FFH0FFH,试试判判断断下下列列程程序序执执行行结果。结果。MOV R0,#40H MOV A,R0 MOV R1,A MOV B,R1 MOV R1,P1 MOV P2,P1 解:执行结果为:解:执行结果为:(A)80H,(B)47H,(R0)40H,(R1)80H,(P1)0FFH,(P2)0FFH,(80H)0FFH。;(R0)40H;(A)(40H)80H;(R1)80H;(B)(80H)47H;(80H)
6、0FFH;(P2)0FFH 通用传送指令通用传送指令MOV内部内部RAM数据传送指令数据传送指令2.数据交换指令数据交换指令1)字节交换指令字节交换指令XCH XCH A,Rn ;(A)(Rn)XCH A,direct ;(A)(direct)XCH A,Ri ;(A)(Ri)例:设例:设(A)=08H,(R7)=0DCH,执行指令执行指令 XCH A,R7结果为:结果为:(A)=0DCH,(R7)=08H功能:将累加器功能:将累加器A中内容与源操作数互换。中内容与源操作数互换。e.g.(A)=80H,(R0)=30H,(30H)=0FH,执行指令,执行指令 XCHD A,R0 结果为:结果为
7、A)=8FH,(30H)=00H2)半字节交换半字节交换XCHD XCHD A,Ri ;(A)低4位(Ri)低4位 功能:累加器功能:累加器A中内容与源操作数低中内容与源操作数低4位交换,高位交换,高4位不变。位不变。3)累加器高低数字节交换指令累加器高低数字节交换指令SWAP A SWAP A ;(A)低低4位位(A)高高4位位 功能:功能:A中高中高4位与低位与低4位互换。位互换。e.g.(A)=80H,执行,执行SWAP A结果为:结果为:(A)08H.数据交换指令数据交换指令解解:XCH A,20H SWAP A MOV R1,#21H XCHD A,R1 SWAP A XCH A
8、20H 【例例】试用交换指令使片内试用交换指令使片内20H20H单元的高单元的高4 4位与位与21H21H单元的低单元的低4 4位交换。位交换。数据交换指令数据交换指令H1L1H0L021 H20 HAH0L0L0H0R121HL0L1L1L0H1H0L1L0H0L0内部内部RAM数据传送指令数据传送指令3.堆栈操作指令堆栈操作指令数据写入堆栈称数据写入堆栈称入栈入栈,数据从堆栈中读出称,数据从堆栈中读出称出栈出栈。堆栈示意图堆栈示意图 PUSH direct;(SP)(SP)+1,(SP)(direct)功功能能:将将堆堆栈栈指指针针加加1 1后后,片片内内RAM单单元元内内容容送送进进栈
9、栈顶顶单单 元,原元,原RAM单元内容不变。单元内容不变。说明:说明:PUSH指令常用于保护指令常用于保护CPUCPU现场。现场。栈操作是字节指令,每次只能压入或弹出栈操作是字节指令,每次只能压入或弹出1 1个字节的内容。个字节的内容。e.g.e.g.PUSH DPTR是是错错误误的的,但但可可以以用用以以下下两两条条指指令令完完成成DPTR的入栈。的入栈。PUSH DPH PUSH DPL1)入栈指令入栈指令PUSH堆栈操作指令堆栈操作指令【例例】设设(A)=30H,(B)=80H,(SP)=50H.则执行指令:则执行指令:PUSH A PUSH B结果为:结果为:(51H)=30H,(52
10、H)=80H,(SP)=52H堆栈操作指令堆栈操作指令POPdirect ;(direct)(SP),(SP)(SP)-1功能:将功能:将(SP)内容传送给片内内容传送给片内RAM单元,单元,SP内容减内容减1。说明:说明:栈操作要注意先入后出的原则。栈操作要注意先入后出的原则。POP指令常用于恢复指令常用于恢复CPU现场。现场。2)出栈指令出栈指令POP堆栈操作指令堆栈操作指令【例例】试用栈操作指令完成试用栈操作指令完成P0和和P1内容的互换。内容的互换。解:解:PUSH P0 PUSH P1 POP P0 POP P1堆栈操作指令堆栈操作指令数据传送指令数据传送指令 内部RAM数据传送指令
11、 片外数据存储器与累加器A之间的传送指令 程序存储器向累加器A传送指令 MOVX A,DPTR ;(A)(DPTR)MOVX A,Ri ;(A)(Ri)MOVX DPTR,A ;(DPTR)(A)MOVX Ri,A ;(Ri)(A)说明:说明:片片外外数数据据存存储储单单元元与与片片内内RAM之之间间的的数数据据传传送送以以及及片片外外数数据据存存储储单单元元之之间间的的数数据据传传送送不不能能直直接接进进行行,必必须须通通过过累累加加器器A中中转转。MOVX 20H,2000H及及MOVX 3000H,2000H等都是错误的。等都是错误的。寻寻址址方方式式只只能能是是寄寄存存器器间间接接寻寻
12、址址。参参与与间间接接寻寻址址的的寄寄存存器器只只有有Ri(i=0/1)和和DPTR两种(两种(3个)。个)。DPTR为为16位位寄寄数数器器,寻寻址址范范围围为为000H0FFFFH共共64KB空空间间。而而Ri是是8位寄数器,只能寻址位寄数器,只能寻址000FFH低低256单元。单元。片外数据片外数据存储存储器与器与A之间的之间的传送指令传送指令 解:解:MOV DPTR,#2000H MOVX A,DPTR MOV 20H,A MOV DPTR,#2000H MOVX A,DPTR MOV R0,#0FAH MOVX R0,A【例例】将片外数据存储器将片外数据存储器2000H单元的内容传
13、送到片内的单元的内容传送到片内的20H单元中;单元中;将片外数据存储器将片外数据存储器2000H单元的内容传送到片外单元的内容传送到片外0FAH单元。单元。片外数据片外数据存储存储器与器与A之间的之间的传送指令传送指令数据传送指令数据传送指令 内部RAM数据传送指令 片外数据存储器与累加器A之间的传送指令 程序存储器向累加器A传送指令 MOVC A,A+PC ;(A)(A)+(PC)MOVC A,A+DPTR ;(A)(A)+(DPTR)说明:说明:程序存储器程序存储器只能读出,不能写入只能读出,不能写入,所以其数据传送都是,所以其数据传送都是单单 向的向的,即从程序存储器读出数据,且只能向累
14、加器,即从程序存储器读出数据,且只能向累加器A传送。传送。ROMROM片内、片外是统一编址,该指令既可访问片内,又可片内、片外是统一编址,该指令既可访问片内,又可 访问片外程序存储器。访问片外程序存储器。该类指令主要用于查表,又称该类指令主要用于查表,又称查表指令查表指令。应用时,一般以。应用时,一般以 PC或或DPTR确定表格的首址,查表时,根据确定表格的首址,查表时,根据A中不同的内中不同的内 容查找到表格中的相应项,故此时称容查找到表格中的相应项,故此时称PC或或DPTR为基址寄为基址寄 存器,存器,A为变址寄存器,寻址方式为基址加变址寻址。为变址寄存器,寻址方式为基址加变址寻址。使用使
15、用DPTR作基址寄存器比较灵活,且不易出错。建议尽作基址寄存器比较灵活,且不易出错。建议尽 可能使用可能使用MOVCA,A+DPTR指令。指令。程序程序存储器存储器向向A传送指令传送指令 解法一:解法一:以以DPTR为基址寄存器为基址寄存器,平方表首址可灵活安排在适,平方表首址可灵活安排在适当的位置如当的位置如2000H,即平方表的内容从,即平方表的内容从2000H单元放起。单元放起。程序如下:程序如下:ORG 1800H MOV DPTR,#2000H MOV A,20H MOVC A,A+DPTR MOV 21H,A ORG 2000H DB 00H,01H,04H,09H,10H,19H
16、 DB 24H,31H,40H,51H,64H,【例例】以查表方式求出片内以查表方式求出片内RAM中中20H单元数的平方值单元数的平方值,存入存入片内片内21H单元中。单元中。程序程序存储器存储器向向A传送指令传送指令 程序程序存储器存储器向向A传送指令传送指令 查表程序执行示意图查表程序执行示意图 ORG 1000H1000H MOV A,20H 1002H ADD A,#03H 1004H MOVC A,A+PC1005H MOV 21H,A1007H RET1008H DB 00H,01H,04H PC*1006H1005H1004H1003H1002H1001H1000H*00H100
17、7H1008H(PC)=1005H(PC)+(A)=1009H(A)=(1009H)程序程序存储器存储器向向A传送指令传送指令 解法二:解法二:以以PC为基址寄存器,此时表格须紧跟程序之后,且为基址寄存器,此时表格须紧跟程序之后,且要计算好表格首址位置,设要计算好表格首址位置,设(20H)=01H。XCH A,40H XCH A,30H XCH A,40H【例例】改正下列指令中的错误,完成其功能:改正下列指令中的错误,完成其功能:MOV A,2000H ;片外;片外RAM 2000H单元内容送入单元内容送入A。MOVX 20H,2000H ;片外;片外RAM 2000H单元内容送入片内单元内容
18、送入片内20H单元。单元。MOVC A,2000H ;将;将ROM 2000H单元内容送入单元内容送入A。MOVX A,A+DPTR ;以查表方式将片外;以查表方式将片外RAM单元的内容送入单元的内容送入A。XCH 40H,30H ;交换片内;交换片内RAM 30H和和40H单元的内容单元的内容.PUSH AB ;将寄存器对;将寄存器对AB的内容压入堆栈。的内容压入堆栈。解:解:MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2000H MOVX A,DPTR MOV 20H,A MOV DPTR,#2000H MOV A,#0 MOVC A,A+DPTR无法以查表
19、方式将片外无法以查表方式将片外RAM 存储单元的内容送入存储单元的内容送入A。PUSH A PUSH B 数据数据传送指令传送指令综合举例综合举例 MCS-51指令分类指令分类1.数据传送指令2.算术运算指令3.逻辑运算及移位指令4.控制转移指令5.位操作指令(布尔操作)算数运算类指令算数运算类指令 加法指令 减法指令 乘法指令 除法指令1.不带进位的加法指令不带进位的加法指令ADD ADD A,Rn ;(A)(A)+(Rn)(n=0-7)ADD A,direct ;(A)(A)+(direct)ADD A,#data ;(A)(A)+dataADD A,Ri ;(A)(A)+(Ri)(i=0
20、/1)功能:功能:ADD指令把源操作数与累加器指令把源操作数与累加器A内容相加,结果存在累加内容相加,结果存在累加器中。该操作不改变源操作数,影响器中。该操作不改变源操作数,影响PSW中的中的C、AC、OV和和P位。位。说明:说明:ADD指令的指令的目的操作数只能是累加器目的操作数只能是累加器A,且只有以下,且只有以下4种形式。如种形式。如ADDB,40H或或ADD A,203AH都是不存在,非法的。都是不存在,非法的。指令中,参加运算的两个指令中,参加运算的两个8位二进制数,即可看作是位二进制数,即可看作是8位无符号位无符号数(数(0255),也可以看作是),也可以看作是7位带符号数的补码数
21、位带符号数的补码数(-128+127)。)。加法指令加法指令 1 0 1 1 0 0 1 1 +0 1 1 1 1 0 0 1 1 0 0 1 0 1 1 0 0【例例】试编程计算试编程计算40H和和41H两单元字节数的和,并存放在两单元字节数的和,并存放在42H单元。若单元。若(40H)=0B3H,(41H)=79H,给出计算结果并判断,给出计算结果并判断PSW受影响的位。受影响的位。解:程序如下:解:程序如下:MOV A,40H ADD A,41H MOV 42H,A若若(40H)=0B3H,(41H)=79H则运算结果:则运算结果:若是无符号数,和为若是无符号数,和为12CH;若是有符
22、号数,和为若是有符号数,和为+2CH。(42H)=2CH,(C)=1,(AC)=0,(OV)=0,(P)=1。加法指令加法指令X补补+Y补补=X+Y补补X补补-Y补补=X-Y补补2.带进位加法指令带进位加法指令ADDCADDC A,Rn ;(A)(A)+(Rn)+(C)ADDC A,direct ;(A)(A)+(direct)+(C)ADDC A,#data ;(A)(A)+data+(C)ADDC A,Ri ;(A)(A)+(Ri)+(C)功能:该操作与功能:该操作与ADD类似,只是类似,只是PSW中的进位位中的进位位C参参与运算。带进位加法指令通常用于多字节或多个数加法与运算。带进位加法
23、指令通常用于多字节或多个数加法运算。运算。加法指令加法指令解:当解:当(C)(C)0 0时,两指令运行结果一样,为时,两指令运行结果一样,为(A)(A)0A4H0A4H。当当(C)(C)1 1时,两指令运行的结果不同,相差时,两指令运行的结果不同,相差1 1。即即ADD A,30HADD A,30H的结果为的结果为(A)(A)0A4H0A4H,而,而ADDC A,30HADDC A,30H 的结果是的结果是(A)(A)0A5H0A5H。显然,显然,ADDADD指令与指令与C C值无关,而值无关,而ADDCADDC的运行结果与的运行结果与C C值有关。值有关。【例例】已知已知(A)=26H,(3
24、0H)=7EH,(A)=26H,(30H)=7EH,比较在比较在(C)(C)0 0和和(C)(C)1 1两种情况两种情况下执行下执行 ADD A,30H ADD A,30H 和和 ADDC A,30H ADDC A,30H 两条指令结果的区别。两条指令结果的区别。加法指令加法指令解:解:MOV AMOV A,30H 30H ADD A ADD A,40H 40H ;低字节相加;低字节相加 MOV 50HMOV 50H,A A MOV A MOV A,31H 31H ADDC A ADDC A,41H 41H ;高字节相加;高字节相加 MOV 51HMOV 51H,A A MOV A,#00H
25、MOV A,#00H ADDC A ADDC A,#00H#00H ;取高相加产生的进位;取高相加产生的进位 MOV 52HMOV 52H,A A【例例】两字节无符号数相加,被加数放在内部两字节无符号数相加,被加数放在内部RAMRAM的的30H30H,31H31H单元单元(低位放在前),加数放在内部(低位放在前),加数放在内部RAMRAM的的40H40H、41H41H单元。计算两数的单元。计算两数的和,并放在和,并放在50H50H52H52H单元中。单元中。加法指令加法指令多字节数求和,从低字节开始,最低字节多字节数求和,从低字节开始,最低字节相加用相加用ADD指令,高字节相加用指令,高字节相
26、加用ADDC指指令。令。N字节数相加,结果可能为字节数相加,结果可能为N+1字节数。字节数。3.增量指令增量指令INC INC A ;(A)(A)+1INC Rn ;(Rn)(Rn)+1INC direct ;(direct)(direct)+1INC Ri ;(Ri)(Ri)+1INC DPTR ;(DPTR)(DPTR)+1 功能:对功能:对A,Rn,内部内部RAM单元及数据指针单元及数据指针DPTR进行加进行加1操作,除操作,除INC A影响影响P外,不影响任何标志位。外,不影响任何标志位。说明:若原为说明:若原为0FFH,执行该指令后,将变为,执行该指令后,将变为00H,但不,但不影响
27、进位位影响进位位C。加法指令加法指令 其结果为:其结果为:(A)=00H,(R2)=10H,(R0)=40H,(40H)=01H,(DPTR)=1B00H,PSW中,中,(P)=0,C及其它位不变。及其它位不变。【例例】(A)=0FFH,(R2)=0FH,(R0)=40H,(40H)=00H,(DPTR)=1AFFH执行下列指令:执行下列指令:INC A INC R2 INC R0 INC DPTR加法指令加法指令4.十进制调整指令十进制调整指令DA A DA ADA A功能:对累加器中由上一条加法指令(加数和被加数均为压缩的功能:对累加器中由上一条加法指令(加数和被加数均为压缩的BCD码)所
28、获得的结果进行调整。码)所获得的结果进行调整。说明:说明:在指令系统中,在指令系统中,没有专门的十进制(没有专门的十进制(BCD码)的加法运算指令,码)的加法运算指令,只能使用只能使用ADD,ADDC命令,但有时会产生错误。命令,但有时会产生错误。e.g.(a)5+38(b)7+6=13 (c)8+9=17 0 1 0 1 0 1 1 1 1 0 0 0 +)0 0 1 1 +)0 1 1 0 +)1 0 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1为了消除错误,要调整为正确的压缩为了消除错误,要调整为正确的压缩BCD码形式。码形式。注意,注意,DA A指令必须紧跟指令必须紧跟A
29、DD或或ADDC指令使用。指令使用。加法指令加法指令正确正确错误错误错误错误【例例】在在20H20H、21H21H中分别存放压缩中分别存放压缩BCDBCD码码5555和和7272,试将两数相,试将两数相加,并计算出结果。加,并计算出结果。解:解:MOV A,20H ADD A,21H DA A结果结果 (A)=27,(C)=1如果不使用如果不使用DA ADA A指令,则结果为指令,则结果为0C7H0C7H,是错误的。,是错误的。加法指令加法指令 内部所做的调整操作为内部所做的调整操作为(ADD/ADDC运算后运算后):若若A的低位的低位9或或AC=1,则,则A+06H;若若A的高位的高位9或或
30、CY=1,则,则A+60H。【例例】设两个设两个4 4位位BCDBCD码分别存放在码分别存放在30H30H(十位、个位)和(十位、个位)和31H31H(百位、千位)、(百位、千位)、40H40H(十位、个位)和(十位、个位)和41H41H(百位、千位)。试编程求这两个数的和,结果存放在(百位、千位)。试编程求这两个数的和,结果存放在30H30H、31H31H、32H32H中。中。解:解:程序如下:程序如下:MOV RMOV R0 0,#30H#30H MOV RMOV R1 1,#40H#40HMOV A,RMOV A,R0 0 ;取十位、个位;取十位、个位ADD A,RADD A,R1 1
31、两数十位、个位相加;两数十位、个位相加DA A DA A ;调整为;调整为BCDBCD码码MOV RMOV R0 0,A A ;存十位、个位;存十位、个位INC RINC R0 0 INC RINC R1 1MOV AMOV A,RR0 0 ;取千位、百位;取千位、百位ADDC A,RADDC A,R1 1 ;两数千位、百位和进位位相加;两数千位、百位和进位位相加DA A DA A ;调整为;调整为BCDBCD码码MOV RMOV R0 0,A A ;存千位、百位;存千位、百位MOV AMOV A,#0#0ADDC AADDC A,#0#0INC RINC R0 0MOV RMOV R0 0
32、A A ;存万位;存万位加法指令加法指令算数运算类指令算数运算类指令 加法指令 减法指令 乘法指令 除法指令1.带借位的减法指令带借位的减法指令SUBB SUBB A,Rn ;(A)(A)(Rn)(C)SUBB A,direct ;(A)(A)(direct)(C)SUBB A,Ri ;(A)(A)(Ri)(C)SUBB A,#data ;(A)(A)data(C)功能:指令功能是以功能:指令功能是以A A中数为被减数,减去操作数,再减去进中数为被减数,减去操作数,再减去进位,差存在位,差存在A A中。影响中。影响PSWPSW中的中的C C,ACAC,OVOV,和,和P P位。位。说明:说明
33、MCS-51MCS-51指令系统中,指令系统中,无不带进位(实为借位)的减法指令。无不带进位(实为借位)的减法指令。若进行不带借位的减法运算,要在运算前使用若进行不带借位的减法运算,要在运算前使用ADD A,#00HADD A,#00H或或CLR CCLR C等指令将进位标志等指令将进位标志C C清清0 0。减法指令中,无减法指令中,无BCDBCD码调整。码调整。减法指令减法指令【例例】两个双字节数相减,被减数放在两个双字节数相减,被减数放在30H30H,31H31H,减数放在,减数放在40H40H,41H41H中,差放入中,差放入50H50H、51H51H。解:解:ADD A ADD A,
34、00H#00H ;将进位位清;将进位位清0 0 MOV A MOV A,30H30H SUBB A SUBB A,40H 40H ;低字节相减;低字节相减 MOV 50HMOV 50H,A A MOV A MOV A,31H 31H SUBB ASUBB A,41H 41H ;高字节相减;高字节相减 MOV 51HMOV 51H,A A说明:多字节相减,从低字节开始,最低字节相减时,应说明:多字节相减,从低字节开始,最低字节相减时,应先将进位位清先将进位位清0。减法指令减法指令2.减减1指令指令DEC DEC A ;(A)(A)-1DEC Rn ;(Rn)(Rn)-1DEC direct ;
35、direct)(direct)-1DEC Ri ;(Ri)(Ri)-1 功能:减功能:减1运算运算说明:说明:与与INC命令类似命令类似,但无但无DPTR减减1指令。指令。若原为若原为00H,执行该指令后,将变为,执行该指令后,将变为0FFH,但不影响但不影响进位标志进位标志C。对比对比 INC DPTR:若:若DPTR的低字节的低字节DPL=FFH,则执行指令,则执行指令后,后,DPL=00H,DPH值加值加1,不影响,不影响C;如果;如果DPTR=FFFFH,则执行指令后,则执行指令后,DPTR=0000H,也不影响也不影响C。减法指令减法指令 DEC DPTR:错误,没有该指令,可分别
36、进行:错误,没有该指令,可分别进行DEC DPL和和DEC DPH。同样,也可以进行。同样,也可以进行INC DPL和和DEC DPH。同样,同样,除除DEC A影响影响P外,不影响任何标志位。外,不影响任何标志位。e.g.(A)=10H,(R5)=00H,(30H)=2FH,(R0)=40H,(40H)=0FFH。则执行以下指令:则执行以下指令:DEC A;DEC R5;DEC 30H;DEC R0结果为:结果为:(A)0FH,(R5)=0FFH,(30H)=2EH,(40H)=0FEH,(P)=0 减法指令减法指令算数运算类指令算数运算类指令 加法指令 减法指令 乘法指令 除法指令MUL
37、AB功能:累加器功能:累加器A和寄存器和寄存器B中的两个无符号中的两个无符号8位数相乘,所得位数相乘,所得16位乘积的低位乘积的低8位放在位放在A中,高中,高8位入在位入在B中。中。说明:乘法指令说明:乘法指令影响影响PSW的状态的状态。执行。执行MUL指令后,指令后,C被清被清0,OV与结果有关,若与结果有关,若OV=0,表示乘积小于,表示乘积小于255(0FFH),只在,只在A中,中,(B)0;若;若OV=1,则乘积大于,则乘积大于255,(B)0。e.g.(A)=20H,(B)=0A0H,执行指令执行指令MUL AB结果:结果:(A)00H,(B)=14H,即积为,即积为1400H,(C
38、)=0,(OV)=1 乘法指令乘法指令算数运算类指令算数运算类指令 加法指令 减法指令 乘法指令 除法指令 DIV AB 功能:两功能:两8位无符号数相除,被除数置于累加器位无符号数相除,被除数置于累加器A中,除中,除数置于寄存器数置于寄存器B中。指令执行后,商存于中。指令执行后,商存于A中,余数存于中,余数存于B中。中。说明:该指令执行后,说明:该指令执行后,C清清0,若除数为若除数为0(即寄存器即寄存器B内内数据为数据为0),(OV)=1,表明除,表明除0没有意义;若除数不为没有意义;若除数不为0,则,则除法正常执行,除法正常执行,(OV)=0。e.g.(A)=0FBH,(B)=12H,则
39、执行指令,则执行指令DIV AB结果:结果:(A)=0DH,(B)=11H,(C)=0,(OV)=0 除法指令除法指令【例例】编程实现下列运算:编程实现下列运算:FD1D2+D3/D4,其中其中D1、D2、D3、D4都为非都为非0的的8位二进制无符号数。位二进制无符号数。解:解:MOV A,#D1 MOV B,#D2 MUL AB ;计算;计算D1D2 MOV R2,A ;暂存;暂存D1D2的结果的结果 MOV R3,B MOV A,#D3 MOV B,#D4 DIV AB ;计算;计算D3/D4 ADD A,R2 ;乘积的低位与商相加;乘积的低位与商相加 MOV R2,A ;存;存F低位低位
40、 MOV A,R3 ADDC A,#0 ;乘积的高位与低位和的进位相加;乘积的高位与低位和的进位相加 MOV R3,A ;存;存F高位在高位在R3中中综合举例综合举例1.简述简述80C51单片机都有哪些典型工作方式单片机都有哪些典型工作方式?如何进入和退出这些方式?如何进入和退出这些方式?2.编程计算编程计算(02H+05H)203H的结果,并将结的结果,并将结果存放于内部果存放于内部RAM单元的单元的40H和和41H单元单元中,其中中,其中(40H)为低位,为低位,(41H)为高位。为高位。要求:使用查表指令实现平方计算功能。要求:使用查表指令实现平方计算功能。作业作业(2)MCS-51指令
41、分类指令分类1.数据传送指令2.算术运算指令3.逻辑运算及移位指令4.控制转移指令5.位操作指令(布尔操作)逻辑运算及移位指令逻辑运算及移位指令 逻辑运算指令 移位指令1.逻辑与指令逻辑与指令ANL ANL A,Rn ;(A)(A)(Rn)ANL A,direct ;(A)(A)(direct)ANL A,Ri ;(A)(A)(Ri)ANL A,#data ;(A)(A)data ANL direct,A ;(direct)(A)(direct)ANL direct,#data;(direct)(direct)data 说明:说明:逻辑运算是按位进行的,只影响标志位逻辑运算是按位进行的,只影响
42、标志位P。该指令用于该指令用于屏蔽某些位屏蔽某些位。逻辑运算指令逻辑运算指令【例例】将将R R1 1中的低中的低4 4位清位清0 0,高,高4 4位不变。位不变。解:解:MOV A,#11110000B ANL A,R1 MOV R1,A 结果为:结果为:(A)=62H【例例】设设(A)=7AH,(20H)=0E6H,执行指令,执行指令 ANL A,20H逻辑与指令逻辑与指令解:解:0 1 1 1 1 0 1 0 )1 1 1 0 0 1 1 0 0 1 1 0 0 0 1 02.逻辑或指令逻辑或指令ORL ORL A,Rn ;(A)(A)(Rn)ORL A,direct ;(A)(A)(di
43、rect)ORL A,Ri ;(A)(A)(Ri)ORL A,#data ;(A)(A)dataORL direct,A ;(direct)(A)(direct)ORL direct,#data ;(direct)(direct)data【例例】将片外将片外RAM 2000H单元的单元的0、1位置位置1,2、3位清位清0,其它,其它位不变。位不变。解:解:MOV DPTR,#2000H MOVX A,DPTR ORL A,#00000011B ANL A,#11110011B MOV DPTR,A逻辑运算指令逻辑运算指令3.逻辑异或指令逻辑异或指令XRL XRL A,Rn ;(A)(A)(Rn
44、)XRL A,direct ;(A)(A)(direct)XRL A,Ri ;(A)(A)(Ri)XRL A,#data ;(A)(A)dataXRL direct,A,;(direct)(direct)(A)XRL direct,#data ;(direct)(direct)data 说明:说明:若若与与0进行异或运算,结果进行异或运算,结果保持不变保持不变;若若与与1进行异或运算,结果进行异或运算,结果取反取反;自身异或等效于清自身异或等效于清0。e.g.XRL A,A 结果为:结果为:(A)0 逻辑运算指令逻辑运算指令 1 1 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1
45、0 1 0 0 0 1 1【例例】将将20H20H单元内容单元内容1 1、3 3、5 5、7 7位保持不变,位保持不变,0 0、2 2、4 4、6 6位取反。位取反。解:解:XRL 20H,#01010101B 若若 (20H)=11110110 则执行指令:则执行指令:结果为结果为(20H)=10100011B逻辑运算指令逻辑运算指令4.累加器清累加器清0指令指令 CLR CLR A CPL A 5.累加器取反指令累加器取反指令 CPL e.g.(A)0E6H,执行,执行CPL A ,结果为:结果为:(A)=19H说明:说明:1)取反即为)取反即为逻辑非运算逻辑非运算。2)MCS-51单片机
46、没有单片机没有求补指令求补指令,若对累加器,若对累加器A中数求中数求补,则程序如下:补,则程序如下:CPL A INC A 逻辑运算指令逻辑运算指令逻辑运算及移位指令逻辑运算及移位指令 逻辑运算指令 移位指令循环左移:循环左移:RL A ;An+1An,A0 A7循环右移:循环右移:RR A ;An An+1,A7 A0进位循环左移:进位循环左移:RLC A;An+1An,A0C,CA7带进位循环右移:带进位循环右移:RRC A;AnAn+1,A7C,CA0 移移位位指指令令移位指令移位指令【例例】分析下列程序段实现的功能:分析下列程序段实现的功能:MOV A,direct RL A MOV R1,A RL A RL A ADD A,R1 MOV direct,A 解:各指令实现的解:各指令实现的功能依次如程序右边功能依次如程序右边注译,可知该程序实注译,可知该程序实现的功能是将存储单现的功能是将存储单元的数乘以元的数乘以10。;取数设为;取数设为D0;D02;(R1)2D0;2D02;4D02;8D0+2D0;存数;存数10D0【例例】将将20H单元存放的无符号数除单元存放的无符号数除2。解:解:ADD A,#0 ;C清零清零 MOV A,20H RRC A MOV 20H,A移位指令移位指令






