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