算術運算指令 8

2021-08-31 09:35:18 字數 3177 閱讀 1757

算術運算指令

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...