算術運算指令
80x86指令包括加、減、乘、除四種基本算術運算操作及十進位制算術運算調整指令。二進位制加、減法指令,帶符號運算元
採用補碼表示時,無符號數和帶符號資料運算可以使用相同的指令。二進位制乘、除法指令分帶符號數和無符號數運算指令
• 加法指令、減法指令、加1減1指令
• 比較指令、交換相加指令、求補指令
• 乘法指令、除法指令
一、加法指令
格式:add dest,src
adc dest,src
功能:add是將源運算元與目的運算元相加,結果傳送到目的運算元。adc是將源運算元與目的運算元以及cf(低位進製)值相加,結果傳送到目的 如果cf=0 就相當於add
運算元。
源運算元可以是通用暫存器、儲存器或立即數。目的運算元可以是通用暫存器或儲存器運算元。
add,adc指令影響標誌位為of,sf,zf,af,pf,cf。
mov ax,9876h
add ah,al;ax=0e76h cf=1 sf=0o f=0 zf=0 af=0 pf=0
adc ah,al;ax=8576h cf=0 sf=1o f=1 zf=0 af=1 pf=0
二、減法指令
格式:sub dest,src
sbb dest,src
功能:sub將目的運算元減源運算元,結果送目的運算元。sbb將目的運算元減源運算元,還要減cf(低位借位)值,結果送目的運算元。
源運算元可以是通用暫存器、儲存器或立即數。目的運算元可以是通用暫存器或儲存器運算元。
sub,sbb指令影響標誌位為of,sf,zf,af,pf,cf
mov ax, 9966h;ax=9966h
sub al, 80h;al=e6hcf=1sf=1of=1zf=0af=0pf=0
sbb ah, 80h;ah=18hcf=0sf=0of=0zf=0af=0pf=1
三、加1減1指令
格式:inc destdec dest
功能:inc指令將目的運算元加1,結果送目的運算元。dec指令將目的運算元減1,結果送目的運算元。目的運算元為通用暫存器或儲存器運算元。inc,dec指令影響標誌位為of,sf,zf,af,
inc bl;bl←bl+1
inc ax;ax←ax+1
inc wordptr [bx];儲存器運算元加1
dec byte ptr [si];儲存器運算元減1
dec eax;eax←eax-1
四、比較指令
格式:cmp dest,src
功能:目的運算元減源運算元,結果不回送。源運算元為通用暫存器、儲存器和立即數。目的運算元為通用暫存器、儲存器運算元。cmp指令影響標誌位為of,sf,zf,af,pf,cf
cmp cx,3
cmp word ptr [si],3
cmp ax,block
四、比較指令-cmp指令對標誌位的影響
執行比較指令後,對狀態標誌位影響見表。
對於兩個數的比較(ax-bx)有以下3種情況兩個正數比較,使用sf標誌位判斷。
sf=0,則ax≥bx,若zf=1,則ax=bx sf=1則ax兩個無符號數比較,使用cf標誌位判斷。
cf=0,則ax≥bx,若zf=1,則ax=bx
cf=1,則ax兩個負數比較,使用sf標誌位判斷。
sf=0,則ax≥bx,若zf=1,則ax=bx
sf=1,則ax兩個異符號數比較。
如果of=0,仍可用sf標誌判斷大小。
如果of=1,說明結果的符號位發生錯誤,所以
sf=0,則ax綜上所述:兩個異號數比較
當of=0,sf=0,則ax>bx
sf=1,則ax五、交換相加指令
格式:xadd dest,reg
功能:目的運算元加源運算元,結果送目的運算元。原目的運算元內容送源運算元。源運算元允許為通用暫存器。目的運算元允許為通用暫存器、
儲存器運算元。
xadd指令影響標誌位為of,sf,zf,af,pf,cf。
六、求補指令
neg dest
功能:對目的運算元求補,用零減去目的運算元,結果送目的運算元。目的運算元為通用暫存器、儲存器運算元。
neg指令影響標誌位為of,sf,zf,af,pf,cf
七、乘法指令
格式:mul src
imul src
功能:mul為無符號數乘法指令,imul為帶符號數乘法指令。源運算元為通用暫存器或儲存器運算元。目的運算元預設存放在acc(al,ax,eax)
中,乘積存ax,dx:ax,edx:eax中。
位元組乘:al src→ax
字乘:ax src→dx∶ax
雙字乘:eax src→edx∶eax
mul,imul指令執行後,cf=of=0,表示乘積高位無有效資料;cf=of=1表示乘積高位含有效資料,對其它標誌位無定義。
七、乘法指令
mul bl;位元組乘
mul word ptr [si];字乘
imul byte ptr [di];位元組乘
imul dword ptr [ecx];雙字乘
如果使用imul指令,積採用補碼形式表示。
八、除法指令
格式:div src
idiv src
功能:div為無符號數除法,idiv為帶符號數除法。源運算元作為除數,為通用暫存器或儲存器運算元。被除數預設在目的運算元ax,
dx:ax,edx:eax中。
位元組除法:ax/src商→al,餘數→ah
字除法:dx·ax/src商→ax,餘數→dx
雙字除法:edx·eax/src商→eax,餘數→edx
由於被除數必須是除數的雙倍字長,一般應使用擴充套件指令進行高位擴充套件。當進行無符號數除法時,被除數高位按0擴充套件為雙倍除數字長。當進
行有符號數除法時,被除數以補碼表示。可使用擴充套件指令cbw,cwd,cwde,cdq進行高位擴充套件。
例如:mov ax,block
cwd;被除數高位擴充套件
mov bx,1000h
idiv bx
對於帶符號除法,其商和餘數均採用補碼形式表示,餘數與被除數同符號。當除數為零或商超過了規定資料型別所能表示的範圍時,將會出現
溢位現象,產生乙個中斷型別碼為「0」的中斷。執行除法指令後標誌位無定義
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 減法的十進位制調...
彙編(十) 算術運算類指令
算術運算類指令用來執行二進位制及十進位制的算術運算 加減乘除。這類指令會根據運算結果影響狀態標誌,有時要利用某些標誌才能得到正確的結果。一 加法指令 1 加法指令add add reg,imm reg mem reg reg imm reg mem add mem,imm reg mem mem i...