標誌暫存器(flag)

2021-09-26 03:42:59 字數 3437 閱讀 4296

8086cpu的標誌暫存器有16位,其中儲存的資訊通常被稱為程式狀態字。

其他暫存器時用來存放資料的,整個暫存器具有乙個含義。

flag暫存器是按位起作用的,它的每一位都有專門的含義,記錄特定的資訊。

8086cpu的flag暫存器的結構

1514

1312

111098

7654

3210

ofdf

iftf

sfzf

afpfcf

1、zf標誌

(flag的第六位) 零標誌位

它記錄相關指令執行後

結果為0,zf=1

結果不為0,zf=0

例:mov ax,1

sub  ax,1

指令執行後,結果為0,則zf=1

mov ax,2

mov ax,1

指令執行後,結果為1,則zf=0

注意:在8086cpu的指令集中,有的指令的執行是影響標誌暫存器,如:add、sub 等,它們大多數是運算指令(進行邏輯或算數運算)

有的指令的執行對暫存器沒有影響,如mov,push,pop等,它們大多是傳送指令。

2、pf標誌

(flag第二位) 奇偶標誌位

它記錄指令執行後,結果的所有二進位制位中1的個數

為偶數 pf=1

為奇數 pf=0

例:mov al,1

add al,10

執行後,結果為00001011b,其中有3個1(奇數) 則pf=0。

mov al,1

or al,10

執行後,結果為00000011b,其中有2個1(偶數),則pf=1。

3、sf標誌

(flag第七位) 符號標誌位

結果為負,sf=1

結果為正,sf=0

有符號數與補碼

計算機中通常用補碼來表示有符號數。

例:mov al,10000001b

add al,1

將add指令當無符號數運算,那麼add指令相當於計算-127+1為-126(10000010b)

cpu在執行add等指令時,就已經包含兩種含義,也將得到用同一種資訊來記錄兩種結果。

關鍵在於程式需要哪種結果

將資料當做無符號數來運算,sf值無意義。

將資料當做有符號數來運算,可以通過sf得知結果的正負。

某些指令將影響標誌暫存器中多個標誌位,這些被影響的標記位比較全面地記錄了指令的執行結果,為相關的處理提供了所需的依據。

4、cf標誌

(flag第零位) 進製標誌位

在進行無符號運算的時候,它記錄了運算結果的最高有效位向更高位的進製值,或從更高位的借位值。 (進製或借位 cf=1)

例mov al,98h

add al,al

執行後 (al)=30h,cf=1

5、of標誌

(flag第十一位) 溢位標誌位

在進行有符號運算時,如果結果超過了機器所能表示的範圍稱為溢位。

溢位   of=1

6、adc指令

adc是帶進製加法的指令,它利用了cf位記錄的進製數

格式: adc 操作物件1,操作物件2

功能:操作物件1=操作物件1+操作物件2+cf

例 mov ax,2

mov bx,1

sub bx,ax

adc ax,1

執行後,(ax)=4

cf值的含義由adc指令前的指令決定(借位還是進製)

7、sbb指令

帶借位減法的指令,它利用了cf上記錄的借位值。

格式:sbb 操作物件1,操作物件2

功能:操作物件1=操作物件1-操作物件2-cf

sbb和adc是基於相同思想設計的兩種操作指令,sbb在應用思路上與adc類似。

8、cmp指令

cmp是比較指令,功能類似於減法指令,但是不儲存結果。

cmp指令執行後,將對標誌暫存器產生影響。

其他相關指令通過識別這些別影響的標誌暫存器位得知比較結果。

格式:cmp 操作物件1,操作物件2

例:mov ax,1

cmp ax,ax

比較結果為0

其產生影響:zf=1,pf=1,sf=0,cf=0,of=0

具體情況具體分析。

9、檢測比較結果的條件轉移指令

與cmp配合使用。

根據無符號數的比較結果進行轉移的條件轉移指令,它們檢測zf、cf值。

根據有符號數的比較結果進行轉移的條件轉移指令,它們檢測zf、cf和of值。

一些指令:

指令含義

檢測的相關標誌位

je等於則轉移

zf=1

jne不等於則轉移

zf=0

jb低於則轉移

cf=1

jnb不低於則轉移

cf=0

ja高於則轉移

cf=0,zf=0

jna不高於則轉移

cf=1或zf=1

10、df標誌和串傳送指令

(flag第十位) 方向標誌位

在串處理指令中,控制每次操作後si,di的增減

df=0      每次操作後 si,di遞增

df=1      每次操作後 si,di遞減

格式:movsb

功能:(以位元組為單位傳送)

((es)*16+(di))=((ds)*16+(si))

df=0      (si)=(si)+1

(di)=(di)+1

df=1      (si)=(si)-1

(di)=(di)-1

movsw

功能:(以字為單位傳送)

si,di遞增(減)2.

movsb和movsw一般和rep配合使用,格式如下:

rep movsb

rep作用是根據cx的值,重複執行後面的串位址指令。

8086cpu提供下面兩條指令對df位進行設定

cld指令:將標誌暫存器df位置0

std指令:將標誌暫存器df位置1

assume cs:code

data segment

db 'welcome to masm!'

db 16 dup (0)

data ends

code segment

start : mov ax,data

mov ds,ax

mov si,0

mov es,ax

mov di,16

mov cx,16

cldrep movsb

mov ax,4c00h

int 21h

code ends

end start

11、pushf和popf

pushf:將標誌暫存器的值壓棧

popf:從棧中彈出資料,送入標誌暫存器

組合語言 標誌暫存器(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 都具有特殊...

常見的標誌暫存器FLAG的標誌位

進製標誌cf主要用來反映運算是否產生進製或借位。如果運算結果的最高位產生了乙個進製或借位,那麼,其值為1,否則其值為0。使用該標誌位的情況有 多字 位元組 數的加減運算,無符號數的大小比較運算,移位操作,字 位元組 之間移位,專門改變cf值的指令等。奇偶標誌pf用於反映運算結果中 1 的個數的奇偶性...

標誌暫存器df 標誌暫存器

cpu內部的暫存器中,有一種特殊的暫存器具有以下三種作用。用來儲存相關指令的某些執行結果 用來為cpu執行相關指令提供行為依據 用來控制cpu的相關工作方式 這種特殊的暫存器在8086cpu種,被稱為標誌暫存器 flag 8086cpu的標誌暫存器有16位,其中儲存的資訊通常被稱為程式狀態字 psw...