小白学单片机:详解AT89S51算数运算类指令(24条)

算数运算指令结果要影响PSW中标志位。PSW寄存器中各标志位意义如下:

相关指令对标志位影响如下:

算数运算影响标志位示例

一、加法指令

1.不带进位加法

【例】若有2个无符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令 ADD A,30H 后的结果。由于对无符号数相加,要考察CY。由上页图可知,CY=1,因此知道运算的结果发生了进位,即实际值应该是100H+11H。所以,编程者应确保单字节无符号数运算结果不要超过255 。

【例】若有2个有符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令 ADD A,30H 后的结果。有符号数相加,只需考察溢出标志OV即可。由上图可见OV=1,因此可知运算的结果发生了溢出,这说明累加器A中的结果已经不是正确的值了。 编程者应确保单字节有符号数运算结果不超过-128~127。否则,就要将数据用多字节表示或在程序运行中对状态标志进行判断: 无符号数用JNC或JC,有符号数要用JNB或JB。

2.带进位加法(这组指令方便了多字节加法的实现)

3.加1指令

4.十进制调整

DA A ;调整A的内容为正确的BCD码

两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的和。当A中低4位出现了非BCD码(1010~1111)或低4位的进位AC=1,则应在低4位加6调整。当A中高4位出现了非BCD码(1010~1111)或高4位的进位CY=1,则应在高4位加6调整。

执行十进制调整指令后,PSW中的CY表示结果的百位值 。

二、减法指令

1.带借位减法

CY为1,表示D7位需借位; AC为1,表示D3位需借位

OV为1,表示“D6有借位D7无借位”或“D7有借位D6无借位”

用此组指令完成不带借位的减法,只需先清CY为0即可

2.减1指令

这组指令仅 DEC A 影响P标志。其余指令都不影响标志位的状态。

三、乘法(仅有一条乘法指令)

四、除法(仅有一条乘法指令)