8086cpu的flag暫存器的結構如下所示。1,3行為標誌名,2,4行為位數。
ofdf
iftf
1514
1312
111098
sfzf
afpfcf7
6543
210zf標誌:記錄相關指令執行後,其結果是否為0。
pf標誌:記錄相關指令執行後,其結果的所有bit位中1的個數是否為偶數。
of標誌:記錄了有符號數運算的結果是否發生了溢位。
sf標誌:記錄相關指令執行後,其結果是否為負。
上述四個指令,如果是,相應標誌位為1,如果否,相應標誌位為0。
cf標誌:在進行無符號數運算的時候,它記錄運算結果的最高有效位向更高位的進製值,或從更高位的借位值。
df標誌:在串處理指令中,控制每次操作後si,di的增減。df=0, 每次操作後si,di遞增;
df=1,每次操作後si,di遞減。
指令格式: adc 操作物件1, 操作物件2
功能:操作物件1 = 操作物件1 + 操作物件2 + cf
例如指令 adc ax,bx 實現的功能是:(ax)=(ax)+(bx)+cf
注:adc指令和add指令相配合就可以對更大的資料進行加法運算。
指令格式: sbb 操作物件1, 操作物件2
功能:操作物件1=操作物件1-操作物件2-cf
例如指令 sbb ax,bx 實現的功能是:(ax)=(ax)-(bx)-cf
指令格式:cmp 操作物件1,操作物件2
功能:計算操作物件1-操作物件2 但並不儲存結果,僅僅根據計算結果對標誌暫存器進行設定。
例如指令 cmp ax,ax,做(ax)-(ax)的運算,結果為0,但並不在ax中儲存,僅影響flag的相關各位。指令執行後:zf=1, pf=1, sf=0,cf=0,of=0
注:在進行有符號數比較時,僅僅通過判斷sf標誌位的值不能得到比較結果。應同時考查sf(判斷實際結果的正負)和of(得知有沒有溢位),才可以得知邏輯上真正結果的正負。
(1) 如果sf=1,而of=0,則(ah)<(bh)。
(2) 如果sf=1,而of=1,則(ah)>(bh)。
(3) 如果sf=0, 而of=1,則(ah)<(bh)。
(4) 如果sf=0, 而of=0,則(ah)>=(bh)。
指令含義
檢測的相關標誌位
je等於則轉移
zf=1
jne不等於則轉移
zf=0
jb低於則轉移
cf=1
jnb不低於則轉移
cf=0
ja高於則轉移
cf=0且zf=0
jna不高於則轉移
cf=1或zf=1
將cmp和je等指令配合使用時,表現出來的功能有些像高階語言中的if語句。
格式:movsb
功能:執行movsb指令相當於進行下面幾步操作。
(1) ((es)*16+(di))=((ds)*16+(si))
(2) 如果df=0,則:(si)=(si)+1, (di)=(di)+1;如果df=1,則:(si)=(si)-1, (di)=(di)-1。
程式:用串傳送指令,將f000h段中的最後16個字元複製到data段中。
data segment
db 16 dup (0)
data ends
mov ax,0f000h
mov ds,ax
mov si,0ffffh ;ds:si指向f000:ffff
mov ax,data
mov es,ax
mov di,15 ;es:di指向data:000f
mov cx,16 ;(cx)=16,rep迴圈16次
std ;設定df=1,逆向傳送
rep movsb
pushf的功能是將標誌暫存器的值壓棧,而popf是從棧中彈出資料,送入標誌暫存器。 組合語言 標誌暫存器
cpu內部的暫存器中,有一種特殊的暫存器 對於不同的處理機,個數和結構都可能不同 具有三種作用 1 用來儲存相關指令的某些執行結果 2 用來為cpu執行相關指令提供行為依據 3 用來控制cpu的相關工作方式。這種特殊的暫存器在8086cpu中,被稱為標誌暫存器 簡稱為flag 8086cpu的標誌暫...
組合語言 標誌暫存器(flag)
標誌暫存器 flag 1用來儲存相關指令的某些資料結果 2用來為cpu執行相關的指令提供行為依據 3用來控制cpu的相關工作方式 flag暫存器是按位起作用,每一位都有專門的含義 8086cpu 0 cf 2 ff 4 af 6 zf 7 sf 8 tf 9 if 10 df 11 of 都具有特殊...
組合語言 暫存器
乙個典型的cpu由運算器 控制器 暫存器等器件組成,這些器件靠內部匯流排相連。通用暫存器 ax bx cx dx 段位址暫存器 cs ds es ss 專用暫存器 bp sp si di 指令指標暫存器 ip 標誌暫存器 psw ah al ax accumulator 累加暫存器 bh bl bx...