1、南昌大学过控教研室南昌大学过控教研室2008.9第第3 3章章 指令系统指令系统南昌大学过控教研室南昌大学过控教研室2008.93.1单片机指令系统概述单片机指令系统概述指令是指挥计算机工作的命令,一种计算机所能指令是指挥计算机工作的命令,一种计算机所能执行的指令集合称之为该种计算机的指令系统。执行的指令集合称之为该种计算机的指令系统。指令机器指令 0010 0100 0000 1010B(二进制数表示)24 0A(十六进制数表示)汇编指令 ADD A,#0AH 3.1.13.1.1汇编语言汇编语言南昌大学过控教研室南昌大学过控教研室2008.9 3.1.2 3.1.2 指令格式指令格式指令的
2、表示形式称指令格式。编写程序时必须严格按指令的表示形式称指令格式。编写程序时必须严格按指令格式书写。指令格式书写。MCS-51MCS-51指指令令由由操操作作码码和和操操作作数数组组成成。汇汇编编语语言言指指令令格格式如下:式如下:操作码助记符操作码助记符 操作数操作数1 1,操作数,操作数2 2,操作数,操作数3 3 1.操作码助记符操作码助记符2.操作数操作数南昌大学过控教研室南昌大学过控教研室2008.93.2 3.2 寻址方式寻址方式 指令中,操作数可能是指令中,操作数可能是具体的数据具体的数据,也可能是具,也可能是具体的存放体的存放数据的地址或符号数据的地址或符号,无论何种情况,都可
3、由,无论何种情况,都可由操作数取得参与指令运行的二进制数据。这个过程叫操作数取得参与指令运行的二进制数据。这个过程叫作寻址。作寻址。寻寻指指方方式式立即寻址方式立即寻址方式直接寻址方式直接寻址方式寄存器寻址方式寄存器寻址方式寄存器间接寻址方式寄存器间接寻址方式基址加变寻址方式基址加变寻址方式位寻址方式位寻址方式相对寻址方式相对寻址方式南昌大学过控教研室南昌大学过控教研室2008.93.2.1 3.2.1 立即寻址方式立即寻址方式所谓立即寻址就是所谓立即寻址就是操作数在指令中直接给出操作数在指令中直接给出。立即寻。立即寻址方式的操作数称立即数,立即数只能是源操作数,不能址方式的操作数称立即数,立
4、即数只能是源操作数,不能作为目的操作数。作为目的操作数。立即数有立即数有8位立即数和位立即数和16位立即数位立即数。使。使用时在立即数前加用时在立即数前加“#”标志。标志。例:例:MOV A,#20H MOV DPTR,#20D8H 南昌大学过控教研室南昌大学过控教研室2008.93.2.23.2.2直接寻址方式直接寻址方式直接寻址就是操作数直接寻址就是操作数直接以单元地址的形式直接以单元地址的形式给出。直给出。直接地址以存贮单元形式出现接地址以存贮单元形式出现。例如指令:MOV A,20H 南昌大学过控教研室南昌大学过控教研室2008.93.2.33.2.3寄存器寻址方式寄存器寻址方式 寄存
5、器寻址就是寄存器寻址就是操作数在寄存器操作数在寄存器中。中。例如指令:例如指令:MOV AMOV A,R R2 2南昌大学过控教研室南昌大学过控教研室2008.93.2.43.2.4寄存器间接寻址方式寄存器间接寻址方式 寄寄存存器器间间接接寻寻址址使使用用的的寄寄存存器器为为Ri和和DPTR,使使用用时时寄寄存存器器前前面加面加“标志。标志。MOV A,Ri ;MOVX A,DPTR例如:(例如:(R1)80H、(、(80H)=33H,则执行指令,则执行指令MOV A,Ri后,后,累加器累加器A的内容的内容为为33H而而不是不是80H。寄存器间接寻址是寄存器间接寻址是以寄存器以寄存器中的内容为
6、地址中的内容为地址取得操作数的取得操作数的方法。和寄存器寻址相比,寄方法。和寄存器寻址相比,寄存器寻址时,寄存器中存放的存器寻址时,寄存器中存放的是操作数,而寄存器间接寻址是操作数,而寄存器间接寻址中时,寄存器中存放的是操作中时,寄存器中存放的是操作数的地址。数的地址。南昌大学过控教研室南昌大学过控教研室2008.93.2.53.2.5基址加变址寻址方式基址加变址寻址方式 基址加变址寻址就是以基址加变址寻址就是以DPTRDPTR或或PCPC为基址寄存器为基址寄存器,以,以A A为变址寄为变址寄存器存器,以两者内容相加,以两者内容相加形成形成1616位地址位地址作为操作数地址。作为操作数地址。例
7、如指令:例如指令:MOVC AMOVC A,A+DPTRA+DPTR南昌大学过控教研室南昌大学过控教研室2008.93.2.63.2.6位寻址方式位寻址方式 位寻址方式就是位寻址方式就是以位为操作数以位为操作数。MCS-51MCS-51单片机有相当强的位单片机有相当强的位处理功能,可以对位进行直接操作。处理功能,可以对位进行直接操作。例如指令:例如指令:MOV C,4AH 位寻址范围:位寻址范围:1)内部)内部RAM的位寻址区的位寻址区 2)可供位寻址的)可供位寻址的11个专用寄存器个专用寄存器 南昌大学过控教研室南昌大学过控教研室2008.93.2.73.2.7相对寻址方式相对寻址方式 相对
8、寻址是在相对转移指令中,根据相对寻址是在相对转移指令中,根据地址相对当前地址相对当前 PCPC的偏移量的偏移量得到操作数的方式。如:得到操作数的方式。如:JZ relJZ rel偏移量偏移量rel是一带符号是一带符号8位二进数的补码数,范围位二进数的补码数,范围为为-128+127。实际书写程序时往往先用地址标号代。实际书写程序时往往先用地址标号代替,在汇编为机器指令时再计算出来。替,在汇编为机器指令时再计算出来。南昌大学过控教研室南昌大学过控教研室2008.9例例3-1 指出下列每一条指令的寻址方式。指出下列每一条指令的寻址方式。MOV 2FH,#40HMOV A,R0MOV DPTR,#2
9、020HMOV 45H,P0MOV A,R1MOVC A,A+PCJC LOOP 中中的的源源操操作作数数为为立立即即寻寻址址,目目的的操作数为直接寻址。操作数为直接寻址。中中的的源源操操作作数数为为寄寄存存器器间间接接寻寻址址,目的操作数为寄存器寻址。目的操作数为寄存器寻址。中中的的源源操操作作数数为为16位位立立即即寻寻址址,目的操作数为寄存器寻址。目的操作数为寄存器寻址。中中的的源源操操作作数数和和目目的的操操作作数数都都是是直接寻址。直接寻址。中中的的源源操操作作数数和和目目的的操操作作数数都都为为寄存器寻址。寄存器寻址。中中的的源源操操作作数数为为基基址址加加变变址址寻寻址址,目的操
10、作数为寄存器寻址。目的操作数为寄存器寻址。中的操作数为相对寻址。中的操作数为相对寻址。南昌大学过控教研室南昌大学过控教研室2008.9 例例3-23-2 判断下列指令是否正确,若不正确请指出判断下列指令是否正确,若不正确请指出错误:错误:MOV A ,DPTR MOV DPTR,#03H MOV#80H,R7 MOV B,C 解解不不正正确确。A是是8位位寄寄存存器器,DPTR为为16位位寄寄存器,不匹配。存器,不匹配。正确。不正确。不正确。#80H为立即数,不能作为目的地址。为立即数,不能作为目的地址。不不正正确确。B为为8位位字字节节寄寄存存器器,C为为1位位位位累累加加器器,不匹配。不匹
11、配。南昌大学过控教研室南昌大学过控教研室2008.93.3 3.3 数据传送指令数据传送指令1.通用传送指令通用传送指令MOV 指令格式:指令格式:MOV MOV ,功能:把源操作数所表示的数据传送到目的地址功能:把源操作数所表示的数据传送到目的地址指定的存贮单元之中,而不改变源操作数。即该指令指定的存贮单元之中,而不改变源操作数。即该指令是是“复制复制”,不是,不是“搬家搬家”。3.3.13.3.1内部内部RAMRAM数据传送指令数据传送指令南昌大学过控教研室南昌大学过控教研室2008.92)以以Rn为目的地址的指令为目的地址的指令 MOV Rn,A ;Rn (A)MOV Rn,direct
12、 ;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 南昌大学过控教研室南昌大学过控教研室2008.94)以寄存器间接地址为目的的地址的指令以寄存器间接地址为目的的地址的指令 MOV Ri,A ;(Ri)(A)MOV Ri,direct ;(Ri)(direct)MOV Ri,#data ;(Ri)data3)以直接地址为目的地址的指令以直接地址为目的地址的指令 MOV di
13、rect,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 南昌大学过控教研室南昌大学过控教研室2008.9南昌大学过控教研室南昌大学过控教研室2008.9例例3-33-3 设设RAM RAM 40H40H单单元元的的内内容容为为80H80H,8
14、0H80H单单元元内内容容为为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)0FFH;P2 0FFH 南昌大学过控教研室南昌大学过控教研室2008.91)字节交换指令字节交换指令X
15、CH XCH A,Rn ;(A)(Rn)XCH A,direct ;(A)(direct)XCH A,Ri ;(A)(Ri)2.2.数据交换指令数据交换指令例:设例:设(A)=08H,(R7)=0DCH,执行指令执行指令 XCH A,R7结果为:结果为:(A)=0DCH,(R7)=08H功能:将累加器功能:将累加器A中内容与源操作数互换。中内容与源操作数互换。南昌大学过控教研室南昌大学过控教研室2008.9 例:例:(A)=80H,(R0)=30H,(30H)=0FH,执行指令,执行指令 XCHD A,R结果为:结果为:(A)=8FH,(30H)=00H2)半字节交换半字节交换XCHDXCHD
16、 A,Ri ;(A)低4位(Ri)低4位 功能:累加器功能:累加器A中内容与源操作数低中内容与源操作数低4位交换,高位交换,高4位不变。位不变。3)累加器高低数字节交换指令累加器高低数字节交换指令SWAP A SWAP A ;(A)低低4位位(A)高高4位位 功能:功能:A中高中高4位与低位与低4位互换。位互换。例:例:(A)=80H,执行,执行SWAP A结果为:结果为:(A)08H.南昌大学过控教研室南昌大学过控教研室2008.9解解 XCH A,20H SWAP A MOV R1,21H XCHD A,R1 SWAP A XCH A,20H 例例3-43-4试用交换指令使片内试用交换指令
17、使片内20H20H单元的高单元的高4 4位与位与21H21H单元的低单元的低4 4位交换。位交换。南昌大学过控教研室南昌大学过控教研室2008.9数据写入堆栈称数据写入堆栈称入栈入栈,数据从堆栈中读出称,数据从堆栈中读出称出栈出栈。3.栈操作指令栈操作指令南昌大学过控教研室南昌大学过控教研室2008.9 PUSH direct;SP (SP)+1,(SP)(direct)功功能能:将将堆堆栈栈指指针针加加1 1后后,片片内内RAM单单元元内内容容送送进进栈栈顶顶单单元,原元,原RAM单元内容不变。单元内容不变。说明:说明:PUSH指令常用于保护指令常用于保护CPUCPU现场。现场。栈栈操操作作
18、是是字字节节指指令令,每每次次只只能能压压入入或或弹弹出出1 1个个字字节的内容。节的内容。如如PUSH DPTR是是错错误误的的,但但可可以以用用以以下下两两条条指指令完成令完成DPTR的入栈。的入栈。PUSH DPH PUSH DPL1)入栈指令入栈指令PUSH南昌大学过控教研室南昌大学过控教研室2008.9例:设例:设(A)=30H,(B)=80H,(SP)=50H.则执行指令:则执行指令:PUSH A PUSH B结果为:结果为:(51H)=30H,(52H)=80H,(SP)=52H南昌大学过控教研室南昌大学过控教研室2008.9POPdirect ;direct (SP),SP (
19、SP)-1功能:将功能:将(SP)内容传送给片内内容传送给片内RAM单元,单元,SP内容减内容减1。说明:说明:栈操作要注意先入后出的原则。栈操作要注意先入后出的原则。POP指令常用于恢复指令常用于恢复CPU现场。现场。2)出栈指令出栈指令POP南昌大学过控教研室南昌大学过控教研室2008.9例例3-5 试用栈操作指令完成试用栈操作指令完成P0和和P1内容的互换。内容的互换。解解 PUSH P0 PUSH P1 POP P0 POP P1南昌大学过控教研室南昌大学过控教研室2008.93.3.2 3.3.2 片外数据存贮器与累加器片外数据存贮器与累加器A A之间的之间的 传送指令传送指令 MO
20、VX 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等都是错误的。等都是错误的。寻寻址址方方式式只只能能是是寄寄存存器器间间接接寻寻址址。参参与与间间接接寻寻址址的的寄寄存存器器只只有有Ri和和DPTR两种(两种
21、(3个)。个)。DPTR为为16位位寄寄数数器器,寻寻址址范范围围为为000H0FFFFH共共64KB空空间间。而而Ri是是8位寄数器,只能寻址位寄数器,只能寻址000FFH低低256单元。单元。南昌大学过控教研室南昌大学过控教研室2008.9解解 MOV DPTR,#2000H MOVX A,DPTR MOV 20H,A MOV DPTR,#2000H MOVX A,DPTR MOV R0,#0FAH MOVX R0,A例例3-6 将片外数据存贮器将片外数据存贮器2000H单元的内容传送单元的内容传送到片内的到片内的20H单元中;单元中;将片外数据存贮器将片外数据存贮器2000H单单元的内容
22、传送到片外元的内容传送到片外0FAH单元单元。南昌大学过控教研室南昌大学过控教研室2008.93.3.3 3.3.3 程序存贮器向累加器程序存贮器向累加器A A传送指令传送指令 MOVC A,A+PC ;A (A)+(PC)MOVC A,A+DPTR ;A (A)+(DPTR)说明:说明:程序存贮器程序存贮器只能读出,不能写入只能读出,不能写入,所以其数据传送都是,所以其数据传送都是单单 向的向的,即从程序存贮器读出数据,且只能向累加器,即从程序存贮器读出数据,且只能向累加器A传送。传送。ROMROM片内、片外是统一编址,该指令既可访问片内,又可片内、片外是统一编址,该指令既可访问片内,又可
23、访问片外程序存贮器。访问片外程序存贮器。该类指令主要用于查表,又称查表指令。应用时,一般以该类指令主要用于查表,又称查表指令。应用时,一般以 PC或或DPTR确定表格的首址,查表时,根据确定表格的首址,查表时,根据A中不同的内中不同的内 容查找到表格中的相应项,故此时称容查找到表格中的相应项,故此时称PC或或DPTR为基址寄为基址寄 存器,存器,A为变址寄存器,寻址方式为基址加变址寻址。为变址寄存器,寻址方式为基址加变址寻址。使用使用DPTR作基址寄存器比较灵活,且不易出错。建议尽作基址寄存器比较灵活,且不易出错。建议尽 可能使用可能使用MOVCA,A+DPTR指令。指令。南昌大学过控教研室南
24、昌大学过控教研室2008.9解法一解法一 以以DPTR为基址寄存器为基址寄存器,平方表首址可灵活安排在,平方表首址可灵活安排在适当的位置如适当的位置如2000H,即平方表的内容从,即平方表的内容从2000H单元放起。单元放起。程序如下:程序如下:ORG 1800H MOV DPTR,#2000H MOV A,20H MOVC A,A+DPTR MOV 21H,A ORG 2000H DB 00H,01H,04H,10H,19H,24H DB 31H,40H,51H,64H,例例3-7 以查表方式求出片内以查表方式求出片内RAM中中20H单元数的平方值单元数的平方值,存入片内存入片内21H单元中
25、。单元中。南昌大学过控教研室南昌大学过控教研室2008.9南昌大学过控教研室南昌大学过控教研室2008.9 ORG 1000H1000MOV A,20H 1001 ADD A,#03H 1003 MOVC A,A+PC1004 MOV 21H,A1006 RET1007 DB 00H,01H,04H 解法二解法二 以以PC为基址寄存器,此时表格须紧跟程序之后,为基址寄存器,此时表格须紧跟程序之后,且要计算好表格首址位置。且要计算好表格首址位置。南昌大学过控教研室南昌大学过控教研室2008.9 XCH A,20H XCH A,30H XCH A,20H例例3-8 改正下列指令中的错误,完成其功能
26、:改正下列指令中的错误,完成其功能:MOV A,2000H ;片外;片外RAM 2000H单元内容送入单元内容送入A。MOVX 20H,2000H ;片外;片外RAM 2000H单元内容送入片内单元内容送入片内20H单元。单元。MOVC A,2000H ;将;将ROM 2000H单元内容送入单元内容送入A。MOVX A,A+DPTR ;以查表方式将片外;以查表方式将片外RAM单元的内容送入单元的内容送入A。XCH 40H,30H ;交换片内;交换片内RAM 30H和和40H单元的内容单元的内容.PUSH AB ;将寄存器对;将寄存器对AB的内容压入堆栈。的内容压入堆栈。解解 MOV DPTR,
27、#2000H MOVX A,DPTR MOV DPTR,#2000H MOVX A,DPTR MOV 20H,A MOV DPTR,#2000H MOV A,#0 MOVC A,A+DPTR无法以查表方式将片外无法以查表方式将片外RAM 存贮单元的内容送入存贮单元的内容送入A。PUSH A PUSH B 南昌大学过控教研室南昌大学过控教研室2008.93.4算术运算类指令算术运算类指令1.不带进位加不带进位加法指令法指令ADD ADD A,Rn ;A(A)+(Rn)ADD A,direct ;A(A)+(direct)ADD A,#data ;A(A)+dataADD A,Ri ;A(A)+(
28、Ri)3.4.1 3.4.1 加法指令加法指令功功能能:ADD指指令令把把源源操操作作数数与与累累加加器器A内内容容相相加加,结结果果存存在在累累加加器器中。该操作不改变源操作数,影响中。该操作不改变源操作数,影响PSW中的中的C、AC、OV和和P位。位。说说明明:ADD指指令令的的目目的的操操作作数数只只能能是是累累加加器器A,且且只只有有以以上上4种种形形式。如式。如ADDB,40H或或ADD A,203AH都是不存在,非法的。都是不存在,非法的。指指令令中中,参参加加运运算算的的两两个个8位位二二进进制制数数,即即可可看看作作是是8位位无无符符号号数数(0255),也可以看作是),也可以
29、看作是7位带符号数的补码数(位带符号数的补码数(-128+127)。南昌大学过控教研室南昌大学过控教研室2008.9 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例例3-9 试编程计算试编程计算40H和和41H两单元字节数的和,并存放在两单元字节数的和,并存放在42H单元。若(单元。若(40H)=0B3H,(,(41H)=79H,给出计算结果,给出计算结果并判断并判断PSW受影响的位。受影响的位。解解程序如下:程序如下:MOV A,40H ADD A,41H MOV 42H,A若(若(40H)=0B3H,(,(41H)=79H则运算结果:
30、若是无符号数,和为则运算结果:若是无符号数,和为12CH;若是有符号数,和为若是有符号数,和为+2CH。(42H)=2CH,(C)=1,(,(AC)=0,(,(OV)=0,(,(P)=1。南昌大学过控教研室南昌大学过控教研室2008.92.带进位加法指令带进位加法指令ADCCADDC 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参参与运算。带进位加
31、法指令通常用于多字节或多个数加法与运算。带进位加法指令通常用于多字节或多个数加法运算。运算。南昌大学过控教研室南昌大学过控教研室2008.9解解当(当(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的运
32、行结果与的运行结果与C C值有关。值有关。例例3-103-10已知(已知(A A)=26H,(30H)=7EH,=26H,(30H)=7EH,比较在(比较在(C C)0 0、(C C)1 1两种情况下执行两种情况下执行 ADD A,30H ADD A,30H 和和 ADDC A,30HADDC A,30H指令的结果。指令的结果。南昌大学过控教研室南昌大学过控教研室2008.9解解 MOV A MOV A,30H 30H ADD AADD A,40H 40H ;低字节相加;低字节相加 MOV 50HMOV 50H,A A MOV AMOV A,31H 31H ADDC AADDC A,41H 4
33、1H ;高字节相加;高字节相加 MOV 51HMOV 51H,A A ADDC AADDC A,#00H#00H ;取高相加产生的进位;取高相加产生的进位 MOV 52HMOV 52H,A A说明:说明:多字节数求和,从低字节开始,最低字节相加用多字节数求和,从低字节开始,最低字节相加用ADD指令,高字节相加用指令,高字节相加用ADDC指令。指令。N字节数相加,结果可能为字节数相加,结果可能为N+1字节数。字节数。为单独取得进位的值,可参考例为单独取得进位的值,可参考例3 31111。例例3-113-11 两两字字节节无无符符号号数数相相加加,被被加加数数放放在在内内部部RAM30HRAM30
34、H,31H31H单单元元(低低位位放放在在前前),加加数数放放在在内内部部RAM40HRAM40H、41H41H单单元元。计计算算两两数数的的和,放在和,放在50H50H52H52H单元中。单元中。南昌大学过控教研室南昌大学过控教研室2008.93.增量指令增量指令INC INC A INC A ;A (A)+1A (A)+1INC RINC Rn n ;R Rn n (R (Rn n)+1)+1INC direct INC direct ;direct (direct)+1direct (direct)+1INC RINC Ri i ;(;(R R)i i(R(Ri i)+1)+1INC D
35、PTR INC DPTR ;DPTR (DPTR)+1DPTR (DPTR)+1 功功能能:对对A,Rn,内内部部RAM单单元元及及数数据据指指针针DPTR进进行行加加1操作,除操作,除INC A影响影响P外,不影响任何标志位。外,不影响任何标志位。说明:若原为说明:若原为0FFH,执行该指令后,将变为,执行该指令后,将变为00H,但不,但不影响进位位影响进位位C。南昌大学过控教研室南昌大学过控教研室2008.9 其结果为:其结果为:(A)=00H,(R2)=10H,(R0)=40H,(40H)=01H,(DPTR)=1B00H,PSW中,(中,(P)=0,C及其它位不变。及其它位不变。例例
36、3-123-12(A)=0FFH,(R2)=0FH,(R0)=40H,(40H)=00H,(DPTR)=1AFFH执行下列指令:执行下列指令:INC A INC R2 INC R0 INC DPTR南昌大学过控教研室南昌大学过控教研室2008.94.十进制调整指令十进制调整指令DA A DA ADA A功功能能:对对累累加加器器中中由由上上一一条条加加法法指指令令(加加数数和和被被加加数数均均为为压压缩缩的的BCD码)所获得的结果进行调整。码)所获得的结果进行调整。说说明明:在在指指令令系系统统中中,没没有有专专门门的的十十进进制制(BCD码码)的的加加法法运运算指令,算指令,只能使用只能使用
37、ADD,ADDC命令,但有时会产生错误。例如:命令,但有时会产生错误。例如:(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其中其中(a)的运算结果是正确的,的运算结果是正确的,(b)(c)的运算结果是错误的。的运算结果是错误的。为了消除错误,要调整为正确的压缩为了消除错误,要调整为正确的压缩BCD码形式。码形式。注意,注意,DAA指令必须紧跟指令必须紧跟ADD或或ADDC指令使用指令使用。南昌大学过控教研室南昌大学过控教研室2008
38、.9例例3-133-13 在在20H20H、21H21H中中分分别别存存放放压压缩缩BCDBCD码码5555和和7272,试试将将两两数相加,并计算出结果。数相加,并计算出结果。解解MOV AMOV A,20H 20H ADD AADD A,21H21H DA ADA A,结果结果 (A)=27(A)=27,C=1C=1如果不使用如果不使用DADAA A指令,则结果为指令,则结果为0C7H0C7H,是错误的。,是错误的。南昌大学过控教研室南昌大学过控教研室2008.9例例3-143-14 设设两两个个4 4位位BCDBCD码码分分别别存存放放在在30H30H(十十位位、个个位位)和和31H31
39、H(百百位位、千千位位)、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 ;两数十位、个位相加;两数十位、个位相加DA A DA A ;调整为;调整为BCDBCD码码MOV RMOV R0 0,A A ;存十位、个位;存十位、个位INC RINC R
40、0 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,A A ;存万位;存万位南昌大学过控教研室南昌大学过控教研室2008.93.4.2 3.4.2 减法指令减法指令 1.带进位减法指令带进位减法指令SUBB SUBB A,Rn
41、 ;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位。位。说说明明:MCS-51MCS-51指指令令系系统统中中,无无不不带带进进位位(实实为为借借位位)的的减减法法指指令令。若若进进行行不不带带借借的的减减法法运运算算,要要在在运运算算前前使使用用AD
42、D ADD A,#00HA,#00H或或CLR CCLR C等指令将进位标志清等指令将进位标志清0 0。减法指令中,无减法指令中,无BCDBCD码调整。码调整。南昌大学过控教研室南昌大学过控教研室2008.9例例3-153-15 两两个个双双字字节节数数相相减减,被被减减数数放放在在30H30H,31H31H,减数放在减数放在40H40H,41H41H中,差放入中,差放入50H50H、51H51H。解解 ADD A ADD A,#00H#00H ;将进位位清;将进位位清0 0 MOV A MOV A,30H30H SUBB A SUBB A,40H 40H ;低字节相减;低字节相减 MOV 5
43、0HMOV 50H,A A MOV A MOV A,31H 31H SUBB ASUBB A,41H 41H ;高字节相减;高字节相减 MOV 51HMOV 51H,A A说说明明:多多字字节节相相减减,从从低低字字节节开开始始,最最低低字字节节相相减减时时,应应先将进位位清先将进位位清0。南昌大学过控教研室南昌大学过控教研室2008.92.减减1指令指令DEC DEC A ;A (A)-1DEC Rn ;Rn (Rn)-1DEC direct ;direct (direct)-1DEC Ri ;(Ri)(Ri)-1 功能:减功能:减1运算运算说明:说明:与与INC命令类似命令类似,但无但无D
44、PTR减减1指令。指令。若原为若原为00H,执行该指令后,将变为,执行该指令后,将变为0FFH。例如例如(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 南昌大学过控教研室南昌大学过控教研室2008.93.4.3乘法指令乘法指令MULMUL AB功功能能:累累加加器器A和和寄寄存存器器B中中的的两两个个无无符符号号8位位数数相相乘乘,所所得得16位位乘积的低乘积的
45、低8位放在位放在A中,高中,高8位入在位入在B中。中。说说明明:乘乘法法指指令令影影响响PSW的的状状态态。执执行行MUL指指令令后后,C被被清清0,OV与与结结果果有有关关,若若OV=0,表表示示乘乘积积小小于于255(0FFH),只只在在A中中,(B)0;若若OV=1,则乘积大于,则乘积大于255,(B)0。例如:例如:(A)=20H,(B)=0A0H,执行指令执行指令 MUL AB结果:结果:(A)00H,(B)=14H,即积为,即积为1400H,(C)=0,(,(OV)=1 南昌大学过控教研室南昌大学过控教研室2008.93.4.4 3.4.4 除法指令除法指令DIV DIV DIV
46、AB 功功能能:两两8位位无无符符号号数数相相除除,被被除除数数置置于于累累加加器器A中中,除除数数置于寄存器置于寄存器B中。指令执行后,商存于中。指令执行后,商存于A中,余数存于中,余数存于B中。中。说说明明:该该指指令令执执行行后后,C清清0,若若除除数数为为0(即即寄寄存存器器B内内数数据据为为0),(OV)=1,表表明明除除0没没有有意意义义;若若除除数数不不为为0,则(则(OV)=0。例:例:(A)=0FBH,(B)=12H,则,则DIV AB结果:结果:(A)=0DH,(B)=11H,(,(C)=0,(,(OV)=0 南昌大学过控教研室南昌大学过控教研室2008.9例例3-16 编
47、程实现下列运算:编程实现下列运算: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低位低位 MOV A,R3 ADDC A,#0 ;乘积的高位与低位和的进位相加;乘积的高位与低位和的进位相加 MOV R3,A ;存;存F
48、高位在高位在R3中中南昌大学过控教研室南昌大学过控教研室2008.93.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 3.5.1 3.5.1 逻辑运算指令逻辑运算指令说明:说明:逻辑运算是按位进行的,只影响标志位逻辑运算是按位进行的,只影响标志位P。该指令用于该
49、指令用于屏蔽某些位屏蔽某些位。南昌大学过控教研室南昌大学过控教研室2008.9 例例3-173-17 将将R R1 1中的低中的低4 4位清位清0 0,高,高4 4位不变。位不变。解解 MOV A,#11110000B ANL A,R1 MOV R1,A 0 1 1 1 1 0 1 0 )1 1 1 0 0 1 1 0 0 1 1 0 0 0 1 0结果为:结果为:(A)=62H例:设例:设(A)=7AH,(20H)=0E6H,执行指令,执行指令 ANL A,20H南昌大学过控教研室南昌大学过控教研室2008.92.逻辑或指令逻辑或指令ORL ORL A,Rn ;A (A)(Rn)ORL A,
50、direct ;A (A)(direct)ORL A,Ri ;A(A)(Ri)ORL A,#data ;A (A)dataORL direct,A ;direct(A)(direct)ORL direct,#data ;direct (direct)data 例例3-18 将片外将片外RAM 2000H单元的单元的0、1位置位置1,2、3位清位清0,其它位不变。,其它位不变。解解 MOV DPTR,#2000H MOVX A,DPTR ORL A,#00000011B ANL A,#11110011B MOV DPTR,A南昌大学过控教研室南昌大学过控教研室2008.93.逻辑异或指令逻辑异或