1. 程式人生 > >彙編加減乘除指令 add adc sub sbb mul div

彙編加減乘除指令 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版 清華大學出版社