以下均是对于实模式来说。
加
指令 add
add 寄存器,数据 | 比如:add ax,8 |
add 寄存器,寄存器 | 比如:add ax,bx |
add 寄存器,内存单元 | 比如:add ax,[0] |
add 内存单元,寄存器 | 比如:add [0],ax |
指令adc
adc是带进位加法指令,利用了CF标志位上记录的进位值。如
adc ax,1
相当于 (ax) = (ax) + 1 +CF
减
指令 sub
sub 寄存器,数据 | 比如:sub ax,9 |
sub 寄存器,寄存器 | 比如:sub ax,bx |
sub 寄存器,内存单元 | 比如:sub ax,[0] |
sub 内存单元,寄存器 | 比如:sub [0],ax |
指令sbb
sbb是带借位减法指令,利用了CF标志位上记录的借位值。比如
sbb ax,1
相当于 (ax) = (ax) - 1 - CF
乘
指令 mul
(1)两个数是8位
一个数放在al,
另一个数放在8位寄存器或者内存单元中,
结果:放在ax中。
比如:mul byte ptr ds:[0]
含义:(ax) = (al) * ((ds)*16+0)
(2)两个数是16位
一个数放在ax,
另一个数放在16位寄存器中或内存单元中,
结果:低位放在ax,高位放在dx。
比如:mul word ptr [bx+si+8]
含义:(ax) = (ax) * ((ds)*16+(bx)+(si)+8)结果的低16位,
(dx) = (ax) * ((ds)*16+(bx)+(si)+8)结果的高16位。
除
指令 div
(1)被除数为16位,除数为8位
被除数放在ax,
除数放在寄存器或内存单元,
结果:al存储商,ah存储余数。
比如:div byte ptr ds:[0]
含义:(al) = (ax) / ((ds)*16+0的商
(ah) = (ax) / ((ds)*16+0的余数
(2)被除数为32位,除数为16位
被除数高16位放在dx,低16位放在ax,
除数放在寄存器或内存单元,
结果:ax存储商,dx存储余数。
比如:div word ptr es:[0]
含义:(ax) = ((dx)*10000H+(ax)) / ((es)*16+0)的商,
(dx) = ((dx)*10000H+(ax)) / ((es)*16+0)的余数。
参考 《汇率语言》王爽 著 第2版 清华大学出版社