《单片机汇编程序算术逻辑运算》由会员分享,可在线阅读,更多相关《单片机汇编程序算术逻辑运算(23页珍藏版)》请在金锄头文库上搜索。
1、09:48,第5讲:指令系统,知识目标:掌握算术逻辑运算 技能目标:对P1口LED灯操作,09:48,3.3.2 算术运算指令,1 .不带进位加法指令(四条) 2 .带进位加法指令(四条) 3 .带借位减法指令(四条) 4 .乘法指令(1条) 5、除法指令(1条) 6、加1指令(5条) 7、减1指令(4条) 8、十进制调整指令(1条),Back,09:48,1 、 不带进位加法指令(四条),09:48,说明:上述指令的执行将影响标志位AC,Cy,OV,P。当“和”的第3位或第7位有进位时,分别将AC,CY标志位置1,否则为0。溢出标志位OV=C7 + C6(异或),该标志位只有带符号数运算时才
2、有用。,例:若:(A)=78H ,(R0)=64H执行ADD A,R0 后,结果及PSW=?(A):78H= 0111 1000 B+(R0):64H= 0110 0100 B(A):DCH= 1101 1100 B 标志位: CY=0, AC=0, OV=1, P=1,即: PSW=05H结果: (A)=DCH (R0)=64H,Back,09:48,2 、带进位加法指令(四条),09:48,说明:本组指令的功能是同时把源操作数所指出的内容和进位标志未CY都加到累加器A中,结果存放到A中,其余的功能和上面的ADD指令相同。本组指令常用于多字节加法。,例:设(A)=0C3H,(R0)=0AAH
3、, (CY)=1。 执行指令“ADDC A,R0”后的结果及标志位如何? 解:(A): C3H=1100 0011 + (CY): 1=0000 00011100 0100 + (R0): AAH=1010 1010(A): 6EH=0110 1110 标志位:CY=1,OV=1,AC=0, 结果:(A)=6EH,(R0)=0AAH。,09:48,例:编程,将(30H),(31H)单元中的数与(40H),(41H)单元中的数相加,结果存于(30H),(31H)单元中。,解:MOV A, 30HADD A, 40HMOV 30H, AMOV A, 31HADDC A, 41HMOV 31H, A
4、,Back,09:48,3 、带借位减法指令(四条),09:48,说明:这组指令的功能是从累加器A中减去源操作数所指出的数及进位位CY的值,差保留在累加器A中。由于89C51指令系统中没有不带借位的减法指令,如需要的话,可以在“SUBB”指令前用“CLR C”指令将Cy清0,这一点必须注意。,09:48,例:设(A)=0C9H,(R2)=54H,Cy=1。 执行指令“SUBB A, R2”的结果如何?,解:(A)=0C9H= 11001001 B - ) Cy= 1 = 00000001 B11001000 B-) (R2)=54H = 01010100 B(A)=74H = 01110100
5、 B结果为:(A)=74H 标志位为:Cy=0 AC=0 OV=1 P=0,Back,09:48,4、 乘法指令(1条),该指令若乘积大于0FFH,则OV置1,否则OV清0。Cy位总是被清0。,该指令将累加器A和寄存器B中两个无符号数相乘,所得16位积的低字节存放在A中,高字节存放中B中。,例:(A)=4EH,(B)=5DH,执行指令“MUL AB”后结果如何?,解: 结果为:(B)=1CH, (A)=56H,表示积(BA)=1C56H,OV=1。,Back,09:48,5、 除法指令(1条),例:(A)=BFH,(B)=32H。执行指令“DIV AB”后:结果为(A)=03H,(B)=29H
6、;标志位 CY=0,OV=0。,A中内容除以B中内容,整数商存于A中,余数存于B中。,该指令执行后,CY和OV均被清0。 若原(B)=00H,则结果无法确定,用OV=1表示,CY仍为0。,Back,09:48,6、 加1指令(5条),该组指令的操作不影响PSW。若原单元内容为FFH,加1后溢出为00H,也不影响PSW标志。,例:比较指令“INC A”和“ADD A,#01H”的结果。 解: “INC A”指令只将A的内容加1,标志位没有变化。 而“ADD A,#01H”指令不仅将A的内容加1,还影响标志位变化。,09:48,例: 若:(R1)=30H ,(30H)=11H 求执行下面指令后的结
7、果。 INC R1; (30H)=12H INC R1 ; (R1)=31H,解:结果为:(30H)=12H,(R1)=31H。不影响PWS.,Back,09:48,7、 减1指令(4条),该组指令的操作不影响PSW。,Back,09:48,8、 十进制调整指令(1条), 该指令调整累加器内容为BCD码。这条指令跟在ADD或ADDC指令后,将相加后存放在累加器中的结果进行十进制调整,完成十进制加法运算功能。必须注意,本指令不能简单地把累加器A的16进制数变换成BCD码,也不能用于十进制减法的调整。,09:48,例: 设累加器A内容为:01010110B(即为56的BCD码),寄存器R3的内容为
8、01100111B(即67的BCD码),CY内容为1。求执行下列指令后的结果。 ADDC A,R3; DA A;,解:先执行ADDC A,R3;(A): 0101 0110 BCD:56(R3): 0110 0111 BCD:67(+)(CY): 0000 0001 BCD:01 和 : 1011 1110 即(A)=1011 1110 且影响标志位 CY=0,AC=0;,再执行DA A; 因为A中的高四位值为11,大于9,低四位值为14,也大于9,所以内部调整自动进行加66H的操作:1011 1110调整+) 0110 0110 1 0010 0100 BCD:124 即(A)=0010 0
9、100=24BCD,CY=1;AC=1。,Back,09:48,3.3.3 逻辑操作指令,逻辑操作指令包括:与、或、异或、清除、求反、移位等操作。该指令组全部操作数都是8位25条指令。, 1.简单操作指令(2条) 2.移位指令(4条) 3.逻辑“与”指令(6条) 4. 逻辑“或”指令(6条) 5.逻辑“异或”指令(6条),Back,09:48,1 .简单操作指令(2条),Back,09:48,2 .移位指令(4条),我们通常用RLC A指令将累加器A的内容做乘2运算。,例如:无符号8位二进制数 (A)=10111101B=BDH,(CY)=0。将(A)乘2,执行指令 “RLC A”后 结果:(
10、A)=0111 1010B=7AH,(CY)=1,而17AH正是BDH的2倍。,Back,09:48,3. 逻辑“与”指令(6条),这组指令中前四条指令是将累加器A的内容和操作数所指出的内容按位进行逻辑“与”,结果存放在A中。 后两条指令是将直接地址单元中的内容和操作数所指出的单元的内容按位进行逻辑“与”,结果存入直接地址单元中。若直接地址正好是I/O端口,则为“读改写”操作。,Back,09:48,4. 逻辑“或”指令(6条),这组指令的功能是将两个指定的操作数按位进行逻辑“或”,前四条指令的操作结果存放在累加器A中,后两条指令的操作结果存放在直接地址单元中。,Back,09:48,5 .逻辑“异或”指令(6条),这组指令的功能是将两个指定的操作数按位进行“异或”,前四条指令的结果存放在累加器A中,后两条指令的操作结果存放在直接地址单元中 这类指令的操作均只影响标志位P。,Back,