標誌寄存器flag

15   14   13   12   11   10   09   08   07    06   05   04    03   02    01    00

 0     0     0     0    of    df    if      tf     sf     zf     0    af     0     pf     0      cf

 

ZF是flag的第6位,零標誌位,判斷結果是否為0,結果為0,ZF=1   

PF是flag的第2位,奇偶標誌位,運算結果二進制數中1的個數為偶數,PF=1   

SF是flag的第7位,符號標誌位,有符號數 運算結果為負數,SF=1   

CF是flag的第0位,進位標誌位,無符號數 運算結果有進/借位,CF=1 

OF是flag的第11位,溢出標誌位,有符號數 運算結果溢出,OF=1 

DF是flag的第10位,方向標誌位,DF=0 每次操作後 si,di遞增 

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

TF是flag的第8位,TF=1,產生單步中斷,引發中斷過程

IF是flag的第9位,IF=1,CPU響應中斷,引發中斷過程

                 IF=0,不響應可屏蔽中斷

 

add、sub、mul、div 、inc、or、and等運算指令影響flag

mov、push、pop等傳送指令對flag沒影響

 

abc  帶位加法指令,利用CF位上記錄的進位值

abc ax,bx 實現功能(ax)=(ax)+(bx)+CF

 

sbb  帶位減法指令,利用CF位上記錄的借位值

sbb ax,bx 實現功能(ax)=(ax)-(bx)-CF

 

cmp  比較指令,相當於減法指令,不保存結果,隻影響flag相關各位

cmp ax,bx    如果(ax)=(bx), 則 zf=1

             如果(ax)≠(bx), 則 zf=0

             如果(ax)<(bx), 則 cf=1

             如果(ax)≥(bx), 則 cf=0

             如果(ax)>(bx), 則 cf=0且zf=0

             如果(ax)≤(bx), 則 cf=1或zf=1

如果因為溢出導致了實際結果為負,那麼邏輯上真正的結果必然為正

如果因為溢出導致了實際結果為正,那麼邏輯上真正的結果必然為負

 

cmp指令和條件轉移指令配合使用

   指令         含義            檢測的相關標誌位

   je           等於則轉移      zf=1

   jne          不等於則轉移    zf=0

   ja           高於則轉移      cf=0且zf=0

   jb           低於則轉移      cf=1

   jna          不高於則轉移    cf=1或zf=1

   jnb          不低於則轉移    cf=0

 

[…]是閉區間,包括兩端點的值 

(…)是開區間,不包括兩端點的值

 

DF標誌和串傳送指令

   DF 方向標誌位,在串處理指令中,控制每次操作後si、di的增減

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

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

movsb:

   相當於mov es:[di],byte ptr ds:[si]

   如果 df=0              如果 df=1

   inc di                 dec di

   inc si                 dec si

movsw:

   相當於mov es:[di],word ptr ds:[si]

   如果 df=0              如果 df=1

   add si,2               sub si,2

   add di,2               sub di,2

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

   rep movsb

   相當於

   s:movsb

      loop  s

   rep的作用是根據cx的值,重複執行rep後面的串傳送指令 

 

cld  將標誌寄存器中的DF位置0,(配合movsb,則是正向傳送)

std  將標誌寄存器中的DF位置1,(配合movsb,則是反向傳送)

 

pushf    標誌寄存器的值壓棧

popf 標誌寄存器的值出棧

 

標誌位在debug中的表示

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000

DS=****  ES=****  SS=****  CS=****  IP=0100  NV  UP  EI  PL  NZ  NA  PO  NC

flag                                                of    df         sf   zf        pf    cf

值為1的標記                                 OV  DN      NG  ZR      PE  CY

值為0的標記                                 NV  UP       PL  NZ       PO  NC

 

確定補碼:

Xh為8位,X∈(80h,ffh),則Xh是(Xh-256)的補碼

Xh為16位,X∈(8000h,ffffh),則Xh是(Xh-65535)的補碼