四、算术运算类指令 1、概述 ①算术运算类指令都是通过算术逻辑运算单元ALU进行数据运 算处理的指令,包括加、减、乘、除四则运算。使用的助记符为: ADD、ADDC、INC、DA、SUBB、DEC、MUL、DIV等八种。 ②执行结果影响进位标志(Cy)、辅助进位(Ac)、溢出标志(OV)及 奇偶标志(P)。加1和减1指令不影响这些标志。 程序状态字寄存器PSW为标志寄存器。其格式如下: Cy AC FO RS1 RSO 0V-P☐ 1)Cy:进位标志位 保存运算后最高位的进位/借位状态,当有进位/借位,Cy=1,否 则Cy=0。 2)AC:辅助进位标志位 保存低半字节的进位/借位状态,当D3产生进位/借位,AC=1, 否则AC=O。用于十进制调整。 3)OV:溢出标志, ①无符号数相加时,若Cy=1,则产生溢出(和大于255): ②带符号数相加时,最高位是符号位(0正,1负),A为8位 剩余7位,能表示128个数,所以8位带符号的数为(一128—127), 所以Or=C6©C7(C6表示第6位向第7位有进位),产生溢出0V=1, 否则0V=0. 4)P:奇偶标志位反映累加器A中数据的奇偶性。当1的个数 为奇数,P=1,否则P=0
5)F0:用户自定义标志位。 6)RS1、RS0: 工作寄存器区选择位。复位时,PSW=0O州 2、加法指令 ADD A,Rn :(A)+(Rn)→(A) ADD A,direct ;(A)+(direct)→(A) ADD A,@Ri :(A)+(Ri)→(A) ADD A,#data ;(A)+data→(A) 源操作数:Rn、direct、@Ri或立即数。 目的操作数:累加器A。 功能:将工作寄存器Rn、片内RAM单元中的内容、间接地址存 储器中的8位无符号二进制数及立即数与累加器A中的内容相加,相 加的结果仍存放在A中。 例:设(A)=C3H,(RO)=AAH 执行指令:ADDA,RO 11000011B +10101010B 01101101B 执行结果:(A)=6DH,(CY)=1,(OV)=1,(AC)=0。 第六位无进位而第七位有进位,故0V=1,即出现二个负数相加, 结果为正数的错误。 3、带进位加法指令 ADDC A,Rn ;(A)-(A)+(Rn)+(CY) ADDC A,direct (A)-(A)+(direct)+(CY)
ADDC A,@Ri (A)-(A)+((Ri))+(CY) ADDC A,data ;(A)-(A)+#data+(CY) 源操作数:Rn、direct、@Ri或立即数。 目的操作数:累加器A。 功能:将工作寄存器Rn、片内RAM单元中的内容、间接地址存 储器中的8位无符号二进制数及立即数与累加器A的内容和当前进位 标志CY的内容相加,相加的结果仍存放在A中。执行结果影响进位 标志(Cy)、辅助进位(Ac)、溢出标志(OV)及奇偶标志(P)。 用途:这组指令常用于多字节数相加,实现8的倍数位(如16位、 32位)数的加法,这样,数可以扩展到26=65536个,扩大了数的范围, 高位相加时考虑低位的进位。用法除考虑Cy之外,其余与ADD一样。 Cy是下一位进上来的,在计算的末尾。 例:设(A)=C3H,(R0)=AAH,(CY)=1。 执行指令:ADDC A,RO 11000011 10101010 1(CY) 01101110 执行结果: (A)=6EH,(CY)=1,(OV)=1,(AC)=0。 对于带符号数的带进位相加,溢出标志为1,意味着出错,上 例为二个负数相加,出现结果为正数的错误。 4、带借位减法指令
SUBB A,Rn :(A)-(Rn)-(CY)→(A) SUBB A,direct ;(A)-(direct)-(CY)-(A) SUBB A,@Ri ;(A)-(Ri)-(CY)→(A) SUBB A,#dala :(A)-data-(CY)→(A) 功能: 1、从A中减去进位位CY和指定的变量,结果(差)存入A中。 2、若第7位有借位则CY置1,否则CY清0:若第3位有借位, 则AC置1,否则AC清0。 3、若第7位和第6位中有一位需借位而另一位不借位,则0V置 1:OV位用于带符号的整数减法。OV=1,则表示正数减负数结果为 负数,或负数减正数结果为正数的错误结果。 例:设(A)=0C9H,(R2)=54,(CY)=1。 执行指令:SUBB A,R2 11001001 -0101 0100 0000 0001 01110100 执行结果: (A)=74H,(CY)=0,(AC)=0,(0V)=1。 5、增量(加1)指令 INC Rn (Rn)-(Rn)+1 INC direct (direct)-(direct)+1 INC @Ri: (Ri))←(Ri)+1
INC A (A)←(A)+1 INC DPTR (DPTR)←(DPTR)+1 功能:将工作寄存器R、片内RAM单元中的内容、间接地址存 储器中的8位无符号二进制数、累加器A和数据指针DPTR等存储空 间的内容加1,相加的结果仍存放在原单元中。这类指令不影响各个 标志位。 6、减1指令 DEC Rn;(Rn)-→(Rn) DEC direct (direct)-1-(direct) DEC @Ri:(Ri)-1→(Ri) DECA;(A)-1→(A) 功能:与减1指令相反。(存储空间的内容减1) 7、二-十进制码(BCD码)调整指令 DA A BCD(Binary Coded Decimal)码是用4位二进制码来表示一个 十进制数,BCD码只是一种表示形式,与其数值没有关系。BCD码有 很多种(8521、5421、2421、余3码、格雷码等)下图为8421一BCD 码 十进0123456789 二进0000 0000010101011010 制码00011011000110110001 BCD码与二进制码的区别: