3.3.2 算术运算指令
算术运算指令共有24条,包括:加、减、乘、除、加1、减1和BCD运算调整指令,执行结果将影响PSW中的标志位。其操作助记符有ADD,ADDC,SUBB,DA,INC,DEC,MUL,DIV共8种。
1.加法指令(8条)
加法指令分为不带进位加和带进位加,运算结果将影响PSW中的Cy、AC、OV、P标志位。加法指令格式见表3-6。
表3-6 加法指令
要注意进位标志Cy和溢出标志OV的区别:对于无符号数加法,当相加结果大于255,会使Cy=1;对有符号数加法,当相加结果超出(-128~+127)范围,会使OV=C8⊕C7=1,C8、C7分别为最高位和次高位的进位。
【例3-6】设A=76H,R3=66H,执行ADD A,R3指令对PSW有何影响?
解:
指令执行后Cy=0,AC=0,OV=C8⊕C7=0⊕1=1,P=1。
如果以上作为无符号数相加,由Cy判断无进位,结果是正确的。
如果以上作为有符号数相加,2个正数相加结果是负数,结果是错误的,OV=1,所以,进行带符号数的加法运算时,溢出标志OV是一个重要的编程标志,利用它可以判断两个带符号数相加的和数是否溢出。
2.减法指令(4条)
MCS-51单片机的减法指令只有带借位减法指令,其格式见表3-7。
表3-7 减法指令
【例3-7】设A=C9H、((R2))=54H、CY=1,分析执行SUBB A,R2指令的情况。
解:
执行结果:A=74H,Cy=0,AC=0,OV=C8⊕C7=0⊕1=1,P=0。OV=1,说明是有符号数运算,结果发生溢出。
3.乘、除法指令(2条)
乘、除法指令各有1条,其格式见表3-8。
表3-8 乘、除法指令
乘、除法指令完成两个单字节的乘、除运算,执行指令前,要注意在累加器A和寄存器B中放入运算数据。运算对标志位的影响是:如果乘积超过0FFH,则溢出标志OV置“1”,否则清0,进位标志Cy总是被清0;除法运算Cy、OV均为0,但除数B为0则OV=1。
4.加1、减1指令(9条)
MCS-51单片机有5条加1指令,4条减1指令,执行不影响标志位。指令格式见表3-9。
表3-9 加1、减1指令
5.十进制调整指令(1条)
该指令是对累加器A中十进制数运算的结果进行BCD码调整,指令格式见表3-10。
表3-10 十进制调整指令
【例3-8】求十进制数26+56运算的结果。
解: