
1.加法指令
(1)加法 ADD d, s ;d<--d + s


注:
- 该指令影响标志位
- 该指令适合有符号数和无符号数的运算
例1:MOV DX, 4652H
ADD DX, 0f0f0h
无符号数的溢出用进位标志 c 判断。

执行后: (DX) = 3742H
z=0 s = 0 c= 1 o = 0
对无符号数 溢出 结果错
对有符号数 不溢出 结果正确
问: 对带符号数和无符号数怎样判断是否溢出?
(2)带进位加 ADC d, s ;d<--d+s+C
功能: 主要用于多字节运算


注:
- 该指令影响标志位
- 该指令适合有符号数和无符号数的运算
例:在内存的First和Secontd开始的区域中分别存放着2F365H和 5E024 H两个数,要求求其和,并存入Third中。



(3)加1 INC d ;d<--d+1
Rc---M
用于在循环中修改地址指针及循环次数等。
注:该指令影响标志位

例: INC BX
INC [SI]
注意:
(1) 该指令将操作数视为无符号数;
(2) 该指令不影响 进位标志 C
2.减法指令
(1)减法 SUB d, s ;d<--d - s


注:
- 该指令影响标志位
- 该指令适合有符号数和无符号数的运算
(2)带借位减法 SBB d, s ;d<--d - s- C
功能: 主要用于多字节运算


注:
- 该指令影响标志位
- 该指令适合有符号数和无符号数的运算
注意: 同加法指令 有符号数的溢出用溢出标志 O判断;
无符号数的溢出用进位标志 C 判断。
例: SUB DH, [BP+4] (DH)=41H
(SS)= 0000H (BP)=00E0H
(00E4H)= 4AH

结果: (DH)=0E7H
S=1 Z=0 C=1 O=0
如果为有符号数则结果正确(无溢出)
如果为无符号数则结果错误(有溢出)
例3: 双精度数运算 W=X+Y+24-Z

(3)减1 DEC d ;d<--d-1
Rc---M
用于在循环中修改地址指针及循环次数等。
注:该指令影响标志位
例: DEC BX
DEC [SI]

注意: (1) 该指令将操作数视为无符号数;
(2) 该指令不影响 进位标志 C
(4)取反加1 NEG d ;d<--/d+1
d=Rc----M
注意: 该指令影响 标志位

(5)比较 CMP d, s ; d – s


该指令影响标志位
(1)该指令同SUB , 但其不保存运算结果;
(2) 该指令后面通常跟一条转移指令,根据标志位产生不同的程序分支
比较指令主要用于两个数之间的关系:大、小、相等。
如:A, B
1. 比较相等。 只要看Z 标志。Z=1——相等
Z=0——不相等。
2. 比小大小。
分两种情况。
- 无符号数 看进(借)位C 标志。C=1,有借位,则 A<B
C=0,无借位,则 A>B

- 带符号数

8088中有几条用于判断有符号数大小的转移指令,如:
JG / JNLE 大于则转移 条件为: O⊕ S =0 且 Z=0
JL / JNGE 小于则转移 条件为: O⊕ S =1
同样有几条用于判断无符号数大小的转移指令,如:
JA / JNBE 高于则转移 条件为: C=0 且 Z=0
JBE / JNA 低于或等于则转移 条件为: C=1 或 Z=1

3.乘法指令
(1)无符号乘法 MUL s ;AX<-- AL * s
;DX AX<-- AX * s
s=Rc---M

注:
- 该指令影响标志位
- 若结果的高半部分(字节 相乘为AH, 字相乘为DX)
为0 则 C=0,O=0
为1 则 C=1,O=1
(2)带符号乘法 IMUL s ;AX <--AL * s
;DX AX<-- AX * s
s=Rc---M

注:
- 该指令影响标志位
- 若结果的高半部分不是低半部分的符号扩展的话,
则 C=1,O=1
否则 C=0,O=0
符号扩展:

例: MOV AL, 0B4H
MOV BL, 11H
MUL BL
4.除法指令
(1)无符号除法 DIV s
;AH(余),AL(商)<-- AX/s ,s为字节(8位)
;DX(余),AX(商)<-- DX AX / s ,s为字(16位)
s=Rc---M
注:
- 该指令不影响标志位
- s的类型决定是字或字节相除
(2)有符号除法 IDIV s
;AH(余),AL(商)<-- AX/s ,s为字节(8位)
;DX(余),AX(商)<-- DX AX / s ,s为字(16位)
s=Rc---M
注:
- 该指令不影响标志位
- s的类型决定是字或字节相除
- 有符号除之前要进行符号位扩展,用CBW,CWD
(3)字节到字符号位扩展 CBW
;AH<-- AL符号位, 即AL7=0时,AH=0; AL7 =1, AH=0FFH
(4)字到双字符号位扩展 CWD
;DX<-- AX符号位, 即AX15=0时,DX=0; AX15 =1, DX=0FFFFH
该指令不影响标志位
5.十进制调整指令
(1). 十进制数的表示
BCD码 —— 用4位二进制编码的十进制数。

(2). 调整原理
以加法调整为例。

不同的运算指令的调整方法不同,但道理是一样的。
(3). 调整指令
加法: DAA 压缩的BCD码加法十进制调整指令。
AAA 非压缩的BCD码加法十进制调整指令。
减法: DAS 压缩的BCD码减法十进制调整指令。
AAS 非压缩的BCD码减法十进制调整指令。
乘法: AAM 非压缩的BCD码乘法十进制调整指令。
除法: AAD 非压缩的BCD码除法十进制调整指令。
(a)压缩BCD码加法调整指令 DAA


(b)压缩BCD码减法调整指令 DAS


(c)非压缩BCD码加法调整指令 AAA


结果在AH AL中,以非压缩BCD码形式存贮
(d)非压缩BCD码减法调整指令 AAS


结果在AH AL中,以非压缩BCD码形式存贮
(e)非压缩BCD码乘法调整指令 AAM
; AH<-- AL/10的商,AL<-- AL/10的余数

结果在AH AL中,以非压缩BCD码形式存贮
(f)非压缩BCD码除法调整指令 AAD
; AL<-- AH *10 + AL
AH中放非压缩BCD码,AL中放非压缩BCD码,先进行AAD,把它变为二进制数据在AL中,之后进行DIV运算。


