算术运算类指令(Arithmetic Instructions)共24条,作8位无符号数的加减乘除算术运算(没有16位数运算指令)。结果会影响到程序状态字PSW中的进位标志CY、半进位标志AC、溢出标志OV的置位或复位状态。
(1)ADD不带进位加指令(4条)
注:相加过程中各标志变化的判断依据为:
1)第3、7位向高位有进位,则标志AC和标志CY置位,否则清零。
2)第6位进位而第7位无进位,或两者情况互换,则标志OV置位,否则清零。
3)若A中“1”的个数为偶数则奇偶检验位P清零;若“1”的个数为奇数则P置位。
例:设(A)=65H,#data=BAH,执行ADD A,#data
相加结果:
(ACC)=3FH,(CY)=1,(AC)=0,(OV)=0,(P)=0
(CY)=1; 依据1),第7位有进位。
(AC)=0; 依据1),第3位无进位但第7位有进位。
(OV)=0; 依据2),第6位有进位,且第7位也有进位。
(P)=0; 依据3),ACC中有6个“1”,为偶数。
(2)ADDC带进位加指令(4条)
注:运算结果对PSW中标志位的影响与不带进位的加法指令相同。通常用于多字节的加法运算,从低字节开始相加,执行之前需把进位标志清零。
例:设两个16位的无符号数35E8H和5A64H,在片内RAM单元23H~20H中存放的次序为:(23H)=35H,(22H)=E8H;(21H)=5AH,(20H)=64H。把两数相加的结果按照从高字节到低字节的次序存放到21H和20H单元中,指令执行语句如下:
低字节相加的计算过程为:
高字节相加的计算过程(有来自低字节相加的进位“1”)为:
最后结果为904CH,其中存放的情况为:(21H)=90H,(20H)=4CH。
(3)INC增1指令(5条)
例:设(R1)=3EH,(3FH)=FEH,依次执行下述程序:
(4)DA十进制调整指令(1条)
DA A ;对累加器A中BCD码加法运算结果进行十进制调整
BCD码加法只采用4位二进制数的0~9表示十进制数字,相加值在10~15之间则属无效码,故需把结果加6来修正。该指令应跟在加法指令ADD和ADDC之后使用(对减法运算不适用)。(www.xing528.com)
十进制调整指令属单字节指令,所实现的操作为:
例:用BCD码正确表示85+46=131
2.减法指令
(1)SUBB带借位减法指令(4条)
注:*第7位有借位,则进位位CY置“1”,否则清“0”。
*第3位需借位,则半进位AC置“1”,否则清“0”。
*第6位需借位第7位不借位,或两者情况互换,则标志OV置“1”,否则清“0”。
例:(A)=95H,(R1)=63H,(CY)=1
执行指令SUBBA,R0,
结果为:(ACC)=31H,(CY)=0,(AC)=0,(OV)=1,(P)=1
(2)DEC 减1指令(4条)
注:后三条指令操作不影响标志。没有16位数据指针DPTR的减1指令。
3.乘法指令
MUL AB ;(A)←(A)×(B)取乘积低8位,(B)←(A)×(B)取乘积高8位
*A、B都是无符号整数,A装入被乘数,B装入乘数。
*指令执行后,A装入乘积低8位,B装入乘积高8位。
*乘积若大于255,则溢出标志OV置位,否则清为零。
*进位标志CY总是零。
4.除法指令
DIV AB ;(A)←(A)÷(B)取除法的商,(B)←(A)÷(B)取除法的余数
*A、B都是无符号整数,A装入被除数,B装入除数。
*指令执行后,A装入所得的商,B装入余数。
*若除数为“0”,则A和B内容不确定,且溢出标志OV置位;否则OV清为零。
*进位标志CY总是零。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。