彙編標誌位簡介

標誌位簡介:

    標誌寄存器,又稱程序狀態寄存器(它的內容是Program Status Word,PSW).這是一個存放條件碼標誌,控制標誌和系統標誌的寄存器.


6個狀態標誌位

    CF—進位標誌,加法時的最高位(D7或D15)產生進位或減法時最高位出現借位,則CF=1,否則CF=0;
    AF—輔助進位標誌,供BCD碼使用。當D3位出現進位或借位時AF=1,否則AF=0;
    OF—溢出標誌,帶符號數進行算術運算時,其結果超出了8位或16位的表示範圍,產生溢出,則OF=1,否則OF=0;

    ZF—零標誌,運算結果各位都爲零,則ZF=1,否則ZF=0;
    SF—符號標誌,運算結果爲負數時,即運算結果的最高位爲1,則SF=1,否則SF=0;
    PF—奇偶標誌,反映操作結果中“1”的個數的情況,若有偶數個“1”,則PF=1,否則PF=0。

3個控制標誌位

   DF—方向標誌,用來控制數據串操作指令的步進方向;
    當設置DF=1時,將以遞減順序對數據串中的數據進行處理。當設置DF=0時,遞增。
   IF—中斷允許標誌,當設置IF=1,開中斷,CPU可響應可屏蔽中斷請求;當設置IF=0時,關中斷,CPU不響應可屏蔽中斷請求。
   TF—陷阱標誌,爲程序調試而設的。當設置TF=1,CPU處於單步執行指令的方式;當設置TF=0時,CPU正常執行程序。


詳解:

1、進位標誌CF (Carry Flag)

當運算結果的最高有效位有進位(加法)或借位(減法)時,進位標誌置1,

即CF = 1;否則CF = 0。49H + 6DH=B6H, 

沒有進位:CF = 0BBH + 6AH=(1)25H,有進位:CF = 1

2、零標誌ZF (Zero Flag)

若運算結果爲0,則ZF = 1;

否則ZF = 049H + 6DH=B6H,結果不是零:

ZF = 075H + 8BH=(1)00H,結果是零:ZF = 1

3、符號標誌SF (Sign Flag)

運算結果最高位爲1,則SF = 1;

否則SF = 049H + 6DH=B6H,

4、奇偶標誌PF(Parity Flag)

當運算結果最低字節中“1”的個數爲零或偶數時,PF = 1;

否則PF = 03AH + 7CH=B6H=10110110B結果中有5個1,是奇數:PF = 0

5、溢出標誌OF (Overflow Flag)

若算術運算的結果有溢出,則OF=1;

否則 OF=049H + 6DH =B6H,產生溢出:OF = 175H + 8BH =(1)26H,

沒有溢出:OF = 0

什麼是溢出?

處理器內部以補碼錶示有符號數8位表達的整數範圍是:+127~-12816位

表達的範圍是:+32767~-32768

如果運算結果超出這個範圍,就產生了溢出有溢出,說明有符號數的運算結果不正確49H+6DH=B6H,就是73+109=182,已經超出-128~+127範圍,產生溢出,故OF=1;

另一方面,補碼B6H表達真值是-74,顯然運算結果也不正確

溢出標誌OF和進位標誌CF是兩個意義不同的標誌


進位標誌表示無符號數運算結果是否超出範圍,運算結果仍然正確;

溢出標誌表示有符號數運算結果是否超出範圍,運算結果已經不正確。

例1:49H + 6DH=B6H無符號數運算:  

73+109=182範圍內,

無進位有符號數運算:73+109=182範圍外,有溢出

例2:BBH + 6AH=(1)25H無符號數運算:

    187+106=293範圍外,

有進位有符號數運算:-69+106=37範圍內,無溢出

溢出的判斷判斷運算結果是否溢出有一個簡單的規則:只有當兩個相同符號數相加(包括不同符號數相減),而運算結果的符號與原數據符號相反時,產生溢出;因爲,此時的運算結果顯然不正確其他情況下,則不會產生溢出

6、輔助進位標誌AF(Auxiliary Flag)

運算時D3位(低半字節)有進位或借位時,AF = 1;

否則AF = 0。49H + 6DH=B6H,D3有進位:AF = 1

7、方向標誌DF(Direction Flag)

用於串操作指令中,控制地址的變化方向:設置DF=0,存儲器地址自動增加;

設置DF=1,存儲器地址自動減少。

CLD指令復位方向標誌:DF=0STD指令置位方向標誌:DF=1

8、中斷允許標誌IF(Interrupt Flag)

用於控制外部可屏蔽中斷是否可以被處理器響應:

設置IF=1,則允許中斷;

設置IF=0,則禁止中斷。

CLI指令復位中斷標誌:IF=0

STI指令置位中斷標誌:IF=1

9、陷阱標誌TF(Trap Flag)

用於控制處理器進入單步操作方式:

設置TF=0,處理器正常工作;

設置TF=1,處理器單步執行指令。

單步執行指令——處理器在每條指令執行結束時,便產生一個編號爲1的內部中斷這種內部中斷稱爲單步中斷所以TF也稱爲單步標誌利用單步中斷可對程序進行逐條指令的調試這種逐條指令調試程序的方法就是單步調試
EU控制器是執行指令的控制電路,實現從隊列中取指令、譯碼、產生控制信號等。,


在(cmd debug)調試程序中爲了使標誌位的值顯爾易見,他提供用符號表示標誌位的值。


標誌              值爲1的標記          值爲0的標記
of                OV                   NV

df                DN                   UP

if                EI                   DI

sf                NG                   PL

zf                ZR                   NZ

af                AC                   NA

pf                PE                   PO 

cf                CY                   NC


cmp指令
    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
    jb            低於則轉移       cf=1
    jnb           不低於則轉移     cf=0
    ja            高於則轉移       cf=0且zf=0
    jna           不高於則轉移     cf=1或zf=1

DF標誌和串傳送指令
    DF 方向標誌位,在串處理指令中,控制每次操作後si、di的增減
    df=0   每次操作後si、di遞增
    df=1   每次操作後si、di遞減
movsb:
    相當於
    mov es:[di],byte ptr ds:[si]
    如果 df=0
    inc di
    inc si
    如果 df=1
    dec di
    dec si
movsw:
    相當於
    mov es:[di],word ptr ds:[si]
    如果 df=0
    add si,2
    add di,2
    如果 df=1
    sub si,2
    sub di,2
一般來說,movsb和movsw都和rep配合使用,格式如下:
    rep movsb  
    或者  
    rep   movsw
    相當於
    s:movsb
       loop   s
  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章