80X86學習筆記 算術運算指令

2022-03-27 14:55:21 字數 2490 閱讀 9546

1.加法指令add

格式:add oprd1, oprd2

操作:oprd1<-oprd1+oprd2

加法指令影響標誌位,of位更具運算元符號變化情況來設定:若兩個運算元符號相同而結果與之相反時溢位,of=1,否則of=0。

cf可以用來表示無符號數的溢位,最高位產生進製或借位,產生溢位,cf=1。

2.帶進製的加指令adc

格式:adc oprd1, oprd2

操作:oprd<-oprd1+oprd2+cf

add ax, cx

add dx, bx

為實現雙精度加法,必須使用兩條指令完成低位字和高位字加法,在使用高位字相加時,應用adc把前一條add作低位字加法所產生的進製值加入高位字之內,帶符號的雙精度溢位,應根據adc的of位來判斷。

3.加1指令inc

格式:inc oprd

操作:oprd<-oprd+1

運算元可以使通用暫存器,儲存單元,影響標誌位zf,sf,of,pf和af,但不影響cf,該指令主要用於調整位址指標和計數器。

4.減法指令sub

格式:sub oprd1,oprd2

操作:oprd1<-oprd1-oprd2

減法溢位:若兩個數的符號相反, 而結果符號與減數相同則of=1,結果溢位。

5.帶進製減指令sbb

格式:sbb oprd1, oprd2

操作:oprd1<-oprd1 – oprd2 – cf

例:sbb al, dl

sbb dx, ax

該指令主要用於多位元組數相減。

6.減1指令dec

dec oprd

操作:oprd<-oprd-1

例:dec varb

運算元可以使通用暫存器,也可是儲存單元,在相減時,把運算元作為乙個無符號數對待。這條指令執行的結果影響zf,sf,of,pf,af,不影響cf。

該指令主要用於調整位址指標和計數器。

7.取補指令neg

格式:neg oprd

操作:oprd<- -oprd

該指令對運算元取補,就是用0減去運算元,再把結果送回運算元。

若在位元組操作時對128取補,或在字操作對32768取補,則運算元不變,但of被置為1,其他均為0.

運算元可以是通用暫存器,也可是儲存單元,此指令執行結果影響cf,zf,sf,of,af,pf.

運算元為0時,運算結果使cf=0,其他情況則均為1.

8.比較指令cmp

格式:cmp oprd1, oprd2

運算元oprd1減去oprd2,運算結果不送到oprd1,但影響標誌cf,zf,sf,of,af,pf。

執行比較指令後,可根據zf是否置位,判斷兩者是否相等,若兩者是無符號數,則根據cf判斷大小;若為有符號數,則根據sf of判斷大小。

乘除運算指令分為有符號數和無符號數運算指令。

1.乘法指令

乙個運算元總是因旱災暫存器al或ax中,另乙個運算元可以採用立即數方式以外的任一種定址方式。

(1)無符號乘法mul

格式:mul oprd

兩個8位相乘得16位放在ax中,兩個16位相乘得32位乘積放到dx,ax,  dx存放高位字。

若乘積結果高半部分(位元組相乘時為ax, 字相乘時為dx)不等於0,則標誌cf=1,of=1,否則cf=0, of=0,所以若cf=1和of=1表示ah或dx中含有結果的有效數,該指令對其他標誌位無定義。

(2)有符號乘法指令imul

若乘積結果的高半部分不是低半部分符號擴充套件,則標誌cf=1,of=1,若cf=1,of=1表示在ah或dx中含有結果的有效數,該指令對其他標誌位無定義。

2.除法指令

除數總是因旱災暫存器ax(除數是8位)或者dx和ax(除數是16位)中,另乙個運算元可以採用除立即數方式外任意一種定址方式。

(1)無符號數除法指令div

除以8位,商放在al中,餘數放在ah中。

除以16位,商放在ax,餘數放在dx中。

若除數為0,或者在8位數除時超過8位,或者16位除時超過16位,則認為是除溢位,引起0號中斷。

除法指令對標誌位影響無定義。

(2)有符號數除法idiv

當除數字0,或太大(位元組除時超過127,字時超過32767),或者商太小(-127,-3267),則引起0號中斷。

3.符號擴充套件指令

由於除法指令隱含使用字被除數或雙字被除數,所以當除數字位元組,或者除數和被除數為字時,需要在除操作前擴充套件被除數。

(1)位元組轉換為字指令cbw

例:

mov ax, 3487h   ;ah=34h al=87h

cbw                  ;ah=0ffh, al=87h

這條指令不影響各標誌位。

(2)字轉換為雙字指令cwd

例:

mov ax, 4567h    ;ax=4567h

cwd                   ;ax=4567h, dx=0

80X86學習筆記 算術運算指令

加法指令add 格式 add oprd1,oprd2 操作 oprd1 oprd1 oprd2 加法指令影響標誌位,of位更具運算元符號變化情況來設定 若兩個運算元符號相同而結果與之相反時溢位,of 1,否則of 0。cf可以用來表示無符號數的溢位,最高位產生進製或借位,產生溢位,cf 1。2.帶進...

80X86學習筆記 轉移指令

無條件段內直接轉移指令格式 jmp 標號 使控制無條件的轉移到標號位址。例 next mov ax,cx jmp next jmp over over mov ax,1 在執行無條件段內轉移指令時,實際操作是把指令中的位址差加到指令指標ip上,使ip內容為目標位址,從而達到轉移目的。段內無條件直接轉...

80X86學習筆記 資料傳送指令

一.傳送指令 格式 mov dst,src 源運算元可以使累加器,暫存器,儲存單元,立即數。目的運算元不能為立即數。注意問題 源和目的運算元不能同時是段暫存器 段暫存器cs不能作為目的暫存器 ip既不能作為源,也不能作為目的。源運算元與目的運算元型別要一致16對16位,8位對8位。兩個運算元不能都為...