算术运算与逻辑运算指令
算术运算指令都是针对8位二进制无符号数的。
影响PSW的进位Cy、辅助进位Ac、溢出OV标志。
文章目录
一、算术运算指令
1.加法指令
ADD A,Rn ;(A)+(Rn)→A ,n=0~7
ADD A,direct ;(A)+(direct)→A
ADD A,@Ri ;(A)+((Ri))→A,i=0,1
ADD A,#data ;(A)+#data→A
(1)如果位7有进位,则Cy置1,否则Cy清0。
(2)如果位3有进位,则Ac置1,否则Ac清0。
(3)OV=位6进位⊕位7进位。
例1:
(A)=53H,(R0)=FCH,执行指令
ADD A,R0
结果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1(A中奇数个1)。
**注意:**位6和位7同时有进位,所以OV=0。
只有带符号数运算,OV标志才有意义。
OV=1,表示运算结果超过有效范围(-128~+127),运算结果是错误的。
例2:
(A)= 85H,(R0)=20H,(20H)=AFH,执行指令
ADD A,@R0
结果:(A)=34H,Cy=1,Ac=1,OV=1,P=1。
**注意:**由于位7有进位,而位6无进位,所以标志位OV=1
2.带进位加法指令
ADDC A,Rn ;(A)+(Rn)+C→A ,n =0~7
ADDC A,direct ;(A)+(direct)+C→A
ADDC A,@Ri ;(A)+((Ri))+C→A,i =0,1
ADDC A,#data ;(A)+#data+C→A
例3:
(A)=85H,(20H)=FFH,Cy=1,执行指令
ADDC A,20H
结果: (A)=85H,Cy=1,Ac=1,OV=0,P=1。、
3.增1指令
INC A
INC Rn ;n=0~7
INC direct
INC @Ri ;i =0,1
INC DPTR
不影响PSW中的任何标志。
4.十进制调整指令
DA A
两个压缩BCD码按二进制相加后,对A中的加法结果进行十进制调整,得到正确的压缩BCD码的和。
十进制调整方法:
① 累加器低4位大于9或辅助进位Ac=1,则加06H修正。
② 累加器高4位大于9或进位Cy=1,则加60H修正。
例4:
(A)=56H,(R5)=47H,把它们看作两个压缩的BCD数。
执行指令:
ADD A,R5
DA A
低4位大于9,先加06H对结果修正。
之后高4位大于9,再加60H对结果修正。
结果为(A)=03H,Cy=1。
验证56+47=103,结果正确。
5.带借位的减法指令
SUBB A,Rn ; (A)-(Rn)-Cy→A,n =0~7
SUBB A,direct ; (A)-(direct)-Cy→A
SUBB A,@Ri ; (A)-((Ri))-Cy→A, i =0,1
SUBB A,#data ; (A)-#data-Cy→A
如果位7需借位则Cy置1,否则Cy清0;
如果位3需借位则Ac置1,否则Ac清0;
OV=位6借位⊕位7借位。
例5:
(A)=C9H,(R2)=54H,Cy=1,执行指令
SUBB A,R2
结果: (A)=74H,Cy=0,Ac=0,OV=1。
6.减1指令
DEC A ;(A)-1→A
DEC Rn ;(Rn)-1→Rn,n=0~7
DEC direct ;(direct)-1→direct
DEC @Ri ;((Ri))-1→(Ri),i =0,1
不影响标志位(P标志除外)。
例6:
(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令
DEC A ;(A)=0EH
DEC R7 ;(R7)=18H
DEC 30H ;(30H)=0FFH
DEC @R1 ;(40H)=0FEH ,P=1。
7.无符号整数乘法指令
MUL AB ;A×B→BA
积的低字节在A中,高字节在B中。
如果积>255,则OV置1,否则OV清0。Cy标志总是清0。
8.无符号整数除法指令
DIV AB ;A/B商→A,余数→B
Cy和OV清0。如果B=0(即除数为0),则OV置1。
例7:
(A)=FBH,(B)=12H,执行指令
DIV AB
结果: (A)=0DH,(B)=11H,Cy=0,OV=0。
二、逻辑运算指令
1.累加器A 清0指令
CLR A
不影响Cy、Ac、OV等标志位。
2.累加器A求反指令
CPL A
按位逻辑取反,不影响标志位。
3.左循环移位指令
RL A
A向左循环移位,位7循环移入位0,不影响标志位。
4.带进位左循环移位指令
RLC A
将A的内容和Cy位一起向左环移一位。
5.右环移指令
RR A
A的内容向右环移一位,不影响其他标志位。
6.带进位右环移指令
RRC A
A的内容和Cy标志一起向右环移一位。
7.逻辑与指令
ANL A,Rn ;(A)∧(Rn)→A,n=0~7
ANL A,direct ;(A)∧(direct)→A
ANL A,#data ;(A)∧#data→A
ANL A,@Ri ;(A)∧((Ri))→A,i =0~1
ANL direct,A ;(direct)∧(A)→direct
ANL direct,#data ;(direct)∧#data→direct
8.逻辑或指令
ORL A,Rn ;(A)∨(Rn)→A ,n =0~7
ORL A,direct ;(A)∨(direct)→A
ORL A,#data ;(A)∨ #data→A
ORL A,@Ri ;(A)∨((Ri))→A,i =0,1
ORL direct,A ;(direct)∨(A)→direct
ORL direct,#data ;(direct)∨#data→direct
9.逻辑异或指令
XRL A,Rn ;(A)⊕(Rn)→A,n=0~7
XRL A,direct ;(A)⊕(direct)→A
XRL A,@Ri ;(A)⊕((Ri))→A ,i =0,1
XRL A,#data ;(A)⊕#data→A
XRL direct,A ;(direct)⊕(A)→direct
XRL direct,#data ;(direct)⊕#data →direct
例8:
(A)=07H,(R0)=0FDH,执行指令
ANL A,R0
结果: (A)=05H。
例9:
(P1)=05H,(A)=31H,执行指令
ORL P1,A
结果:(P1)=35H。
例10:
(A)=90H,(R3)=73H,执行指令
XRL A,R3
结果: (A)=E3H。