一、加法指令
(一)各加法指令的格式及操作
加法指令可做字或字节运算
(1)加法指令 ADD
- 格式:
ADD DST,SRC
- 执行的操作:
(DST) ← (SRC)+(DST)
(2)带进位加法指令 ADC
- 格式:
ADC DST,SRC
- 执行的操作:
(DST) ← (SRC)+(DST)+CF
(3)加1指令 INC
- 格式:
INC OPR
- 执行的操作:
(OPR) ← (OPR)+1
(二)加法指令对条件标志位的影响
除INC
指令不影响 CF标志外,均影响条件标志
二、减法指令
(一)各减法指令的格式及操作
减法指令可做字或字节运算
(1)减法指令 SUB
- 格式:
SUB DST,SRC
- 执行的操作:
(DST) ← (DST)-(SRC)
(2)带借位减法指令 SBB
- 格式:
SBB DST,SRC
- 执行的操作:
(DST) ← (DST)-(SRC)-CF
(3)减1指令 DEC
- 格式:
DEC OPR
- 执行的操作:
(OPR) ← (OPR)-1
(二)减法指令对条件标志位的影响
除DEC
指令不影响 CF标志外,均影响条件标志
(三)其他减法指令 NEG & CMP
(1)求补指令 NEG
- 格式:
NEG OPR
- 执行的操作:
(OPR) ← -(OPR)
(2)比较指令 CMP
- 格式:
CMP OPR1,OPR2
- 执行的操作:
(OPR1)-(OPR2)
注意:比较指令 CMP
并不保存结果,只设置标志位
三、乘法指令
(一)各乘法指令的格式
(1)无符号乘法指令 MUL
- 格式:
MUL SRC
(2)带符号乘法指令 IMUL
- 格式:
IMUL SRC
(二)乘法指令执行的操作
- 字节操作数:
(AX) ← (AL)*(SRC)
- 字操作数:
(DX,AX) ← (AX)*(SRC)
- 双字操作:
(EDX, EAX) ← (EAX)*(SRC)
注意
- 总是与 AL 或 AX 相乘
- 与 AL 相乘时,结果位于 AX ➡️(AL(AX)为隐含的乘积寄存器)
- 与 AX 相乘时,结果位于 DX、AX ➡️(AX(DX,AX)为隐含的乘积寄存器)
- SRC不能为立即数
(三)乘法指令对条件标志位的影响
影响标志:除CF和OF外,对条件标志位无定义
四、除法指令
(一)各除法指令的格式
(1)无符号除法指令 DIV
- 格式:
DIV SRC
(2)带符号除法指令 IDIV
- 格式:
IDIV SRC
(二)乘法指令执行的操作
字节操作数
(AL) ← (AX)/(SRC)的商
(AH) ← (AX)/(SRC)的余数
字操作数
(AX) ← (DX,AX)/(SRC)的商
(DX) ← (DX,AX)/(SRC)的余数
注意
- 被除数总是 AX 或 DX、AX
- AL(AX)为隐含的商寄存器,AH(DX)为隐含的余数寄存器
- 被除数的位数是除数位数的一倍,需要使用扩展指令
- SRC不能为立即数
- 对所有条件标志位无定义