汇编加减乘除指令 add adc sub sbb mul div

以下均是对于实模式来说。

指令 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版 清华大学出版社







你可能感兴趣的:(ASM)