算術運算類指令用來執行二進位制及十進位制的算術運算:加減乘除。
這類指令會根據運算結果影響狀態標誌,有時要利用某些標誌才能得到正確的結果。
一、加法指令
1、加法指令add
add reg,imm/reg/mem ;reg←reg+imm/reg/mem
add mem,imm/reg ;mem←mem+imm/reg
add指令按照狀態標誌的定義相應的設定這些標誌的0或1狀態。
2、帶進製標誌加法指令adc
adc reg,imm/reg/mem ;reg←reg+imm/reg/mem+cf
adc mem,imm/reg ;mem←mem+imm/reg+cf
adc指令除完成add加法指令運算外,還要加進制cf。
3、增量指令inc
inc reg/mem ;reg/mem←reg/mem+1
inc指令對運算元加1(增量)。它是乙個單運算元指令。
設計加1指令和後面介紹的減1指令的目的,主要是用於對計數器和位址指標的調整,所以他們不影響進製cf標誌,對其他標誌位的影響與add,adc相同。
二、減法指令
1、減法指令sub
sub reg,imm/reg/mem ;reg←reg-imm/reg/mem
sub mem,imm/reg ;mem←mem/reg
2、帶借位減法指令sbb
sbb reg,imm/reg/mem ;reg←reg-imm/reg/mem-cf
sbb mem,imm/reg ;mem←mem-imm/reg-cf
3、減量指令dec
dec reg/mem ;reg/mem←reg/mem-1
同樣不影響cf標誌。
4、求補指令neg
neg reg/mem ;reg/mem←0-reg/mem
neg指令也是乙個單運算元指令,它對運算元執行求補運算,即用零減去運算元,然後結果返回運算元。求補運算也可以表達成:將運算元按位求反後加1。
5、比較指令cmp
cmp reg,imm/reg/mem ;reg-imm/reg/mem
cmp mem,imm/reg ;mem-imm/reg
該指令將目的運算元減去源運算元,但結果不回送目的運算元。也就是說cmp指令與減法指令sub執行相同的操作,同樣影響標誌,只是不改變目的運算元。cmp指令用於比較兩個運算元的大小關係。執行比較指令之後,可以根據標誌判斷兩個數是否相同、大小關係等。所以,cmp指令後常跟條件轉移指令,根據比較結果不同產生不同的分支。
三、乘法指令
1、無符號數乘法指令mul
mul指令執行無符號二進位制數的乘法運算:
mul r8/m8 ;無符號位元組乘:ax←al×r8/m8
mul 6/6 ;無符號字乘:dx.ax←ax×r16/m16
乘法指令隱含使用乙個運算元ax和dx,源運算元則顯式給出,可以是暫存器或儲存單元。mul指令影響標誌of和cf。
2、有符號數乘法指令imul
imul r8/m8 ;有符號數字節乘:ax←al×r8/m8
imul r16/m16 ;有符號數字乘:dx.ax←ax×r16/m16
四、除法指令
1、無符號數除法指令div
div r8/m8 ;無符號位元組除法:al←ax÷r8/m8的商,ah←ax÷r8/m8的餘數
div r16/m16 ;無符號字除法:ax←dx.ax÷r16/m16的商,dx←dx.ax÷r16/m16的餘數。
2、有符號數除法指令idiv
idiv r8/m8
idiv r16/m16
五、符號擴充套件指令
符號擴充套件是指用乙個運算元的符號位(即最高位)形成另乙個運算元,後乙個運算元的各位是全0(正數)或全1(負數)。符號擴充套件指令可用來將位元組轉換為字,字轉換為雙字。均不影響標誌位。
1、位元組轉換為字指令cbw
cbw ;al符號擴充套件成ax
cbw指令將al的最高有效位d7擴充套件至ah,即:如果al的最高有效位是0,則ah=00;al的最高有效位為1,則ah=ffh。al不變。
2、字轉換為雙字指令cwd
cwd ;ax符號擴充套件成dx
指令將ax的內容符號擴充套件形成dx,即如果ax的最高有效位d15位0,則dx=0000h,如果ax的最高有效位為1,則dx=ffffh.
符號擴充套件指令常用來獲得除法指令所需要的被除數。
六、十進位制調整指令
十進位制調整指令對二進位制運算結果進行十進位制調整,以得到十進位制的運算結果。十進位制在計算機中也要用二進位制表示,這就是十進位制編碼的十進位制數:bcd碼。8086支援壓縮的bcd碼和非壓縮的bcd碼,相應的十進位制調整指令分為壓縮bcd碼調整指令和非壓縮bcd碼調整指令。
1、壓縮bcd碼調整指令
壓縮的bcd碼是通常的8421碼,它用4個二進位制位表示乙個十進位制位,乙個位元組可以表示兩個十進位制位,即00~99。
(1)加法的十進位制數調整指令daa
daa ;al←將al中的加和調整為壓縮bcd碼
該指令跟在以al為目的運算元的add或adc指令之後,對al的二進位制結果進行十進位制調整,並在al得到十進位制結果。daa指令對of標誌無定義,按其結果影響所有其他標誌,其中cf反映壓縮bcd碼相加的進製狀態。
(2)減法的十進位制調整指令das
das ;al←將al中的減差調整為壓縮bcd碼
2、非壓縮bcd碼調整指令
非壓縮bcd碼用8個二進位制位表示乙個十進位制位。
(1)加法的非壓縮bcd碼調整指令aaa
aaa ;al←將al中的加和調整為非壓縮bcd碼,ah←ah+調整產生的進製
該指令跟在以al為目的運算元的add或adc指令之後,對al進行非壓縮bcd碼調整;如果調整中產生了進製,則將進製1加到ah中,同時cf=af=1;否則cf=af=0。aaa指令對其他標誌無定義。使al的高4位清0。
(2)減法的非壓縮bcd碼調整指令aas
aas ;al←將al中的減差調整為非壓縮bcd碼,ah←ah-調整產生的借位
該指令跟在以al為目的運算元的sub或sbb指令之後,對al進行非壓縮bcd碼調整;如果調整中產生了借位,則將ah減去借位1,同時cf=af=1;否則cf=af=0.
(3)乘法的非壓縮bcd碼調整指令aam
aam ;ax←將ax中的乘積調整為非壓縮bcd碼
該指令跟在以ax為目的運算元的mul指令之後,對ax進行非壓縮bcd碼調整。利用mul相乘的兩個非壓縮bcd碼的高4位必須為0。aam指令根據結果設定sf、zf和pf,但of、cf、af無定義。
(4)除法的非壓縮bcd碼調整指令aad
aad ;ax←將ax中的非壓縮bcd碼擴充套件成二進位制數,即:al←10d×ah+al,ah←0
aad調整指令與其他的調整指令應用情況不同。他先將存放在ax暫存器中的兩位非壓縮bcd碼數進行調整,然後再用div指令除以乙個非壓縮bcd碼數,這樣得到非壓縮bcd碼數的除法結果。其中,要求al、ah和除數的高4位為0。aad指令根據結果設定sf、zf和pf,但of、cf和af無定義。
組合語言 算術運算類指令
知識回顧 幾個重要標誌位的含意 cf 進製標誌 1 算術操作最高位產生了進製或借位 0 最高位無進製或借位 pf 奇偶標誌 1 資料最低8位中1的個數為偶數 0 資料最低8位中1的個數為奇數 af 輔助進製標誌 1 d3 d4位產生了進製或借位 0 d3 d4位無進製或借位 zf 零標誌 1 操作結...
8086算術運算類指令
算術運算指令 加法類指令 減法類指令 乘法指令 除法指令 bcd嗎指令 一 加法類指令 首先我麼們先看加法類指令三個 add,adc,inc 1 不帶進製位的加法指令add add用來執行2個位元組或2個字的相加操作,運算時不考慮cf位 add影響of,sf,zf,af,pf,cf標誌 2 帶進製位...
彙編指令速查 之二 算術運算指令
add 加法.adc 帶進製加法.inc 加 1.aaa 加法的ascii碼調整.daa 加法的十進位制調整.sub 減法.sbb 帶借位減法.dec 減 1.nec 求反 以 0 減之 cmp 比較.兩運算元作減法,僅修改標誌位,不回送結果 aas 減法的ascii碼調整.das 減法的十進位制調...