8089彙編 標誌寄存器

8089彙編 標誌寄存器

  在8086CPU的指令集中,有的指令的執行是影響標誌寄存器的,比如:add、sub、mul、div、inc、or、and等,它們大都是運算指令,進行邏輯或算術運算;

有的指令的執行對標誌寄存器沒有影響,比如:mov、push、pop等,它們大都是傳送指令。

使用一條指令的時候,要注意這條指令的全部功能,其中包括執行結果對標記寄存器的哪些標誌位造成影響。

標誌寄存器的結構

  flag寄存器是按位起作用的,也就是說,它的每一位都有專門的含義,記錄特定的信息。
  8086CPU中沒有使用flag的1、3、5、12、13、14、15位,這些位不具有任何含義。

標誌寄存器的作用

  用來存儲相關指令的某些執行結果
  用來爲CPU執行相關指令提供行爲依據
  用來控制CPU的相關工作方式

觀察值

標誌位說明

一、標誌位解析

1、直接訪問標誌寄存器的方法

  • pushf :將標誌寄存器的值壓棧;
  • popf :從棧中彈出數據,送入標誌寄存器中。

2、內存中16位標誌位表示

 3、標誌位說明

二、ZF-零標誌(Zero Flag)

ZF標記相關指令的計算結果是否爲0

  • ZF=1,表示“結果是0 ”,1表示“邏輯真”
  • ZF=0,表示“結果不是0”,0表示“邏輯假”

 三、PF-奇偶標誌(Parity Flag)

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

  • 1的個數爲偶數,PF = 1;
  • 1的個數爲奇數,PF = 0。

四、SF-符號標誌(Sign Flag)

SF 標誌是CPU對有符號數運算結果的一種記錄 。   

將數據當作有符號數來運算的時候,通過SF可知結果的正負;將數據當作無符號數來運算,SF的值則沒有意義,雖然相關的指令影響了它的值。

SF記錄指令執行後,將結果視爲有符號數

  • 結果爲負,SF = 1;
  • 結果爲非負,SF = 0。

五、CF-進位標誌(Carry Flag)

在進行無符號數運算的時候,CF記錄了運算結果的最高有效位向更高位的進位值,或從更高位的借位值。 

CF記錄指令執行後:

  • 有進位或借位,CF = 1
  • 無進位或借位,CF = 0

對於位數爲N的無符號數來說,其對應的二進制信息的最高位即第N-1位,是最高有效位

假想存在的第N位,就是相對最高有效位的更高位。

六、OF-溢出標誌(Overflow Flag)

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

OF記錄有符號數操作指令執行後

  • 有溢出,OF = 1
  • 無溢出,OF = 0

機器所能表達的範圍

以8位運算爲例,結果用 8 位寄存器或內存單元來存放,機器所能表示的範圍就是-128~127。

同理,對於16 位有符號數,機器所能表示的範圍是-32768~32767。

注意,此處溢出只是對有符號數運算而言。

CF和OF的區別

CF是對無符號數運算有意義的進/借位標誌位

OF是對有符號數運算有意義的溢出標誌位

應用

 七、DF-方向標誌位(Direction Flag)

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

  • DF = 0:每次操作後si,di遞增;
  • DF = 1:每次操作後si,di遞減。

對DF位進行設置的指令:

  • cld指令:將標誌寄存器的DF位設爲0(clear)
  • std指令:將標誌寄存器的DF位設爲1(setup)

 八、其他標誌說明

TF-陷阱標誌(Trap flag):用於調試時的單步方式操作。當TF=1時,每條指令執行完後產生陷阱,由系統控制計算機;當TF=0時,CPU正常工作,不產生陷阱。

IF-中斷標誌(Interrupt flag):當IF=1時,允許CPU響應可屏蔽中斷請求;當IF=0時,關閉中斷。

CPU在執行完一條指令之後,如果檢測到標誌寄存器的TF位爲1,則產生單步中斷(中斷類型碼爲1),引發中斷過程,執行中斷處理程序。

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