彙編的標誌寄存器

它被稱爲FLAG,也稱爲PSW (Processor Status Word)。共9個標誌。其中有6個狀態標誌位:OF、SF、ZF、AF、PF、CF,及3個控制標誌位DF、IF、TF。
標誌寄存器

PSW在實現IF、FOR這類需要進行條件判斷的語句時非常重要。爲了能熟練編程,我們需要掌握以下這些細節。(彙編裏細節很重要)

  1. 符號標誌S(Sign Flag)。當指令執行結果的高位(字節操作中的D7位或字操作
    的D15位)爲1時,符號標誌S=1,否則S=0。 在視爲帶符號數的
    情況下,S的值代表了運算結果的正負,S=0 表示結果爲正,否則爲負。
  2. 進位標誌 C(Carry Flag)。當指令執行結果的高位(字節操作中的 D7位或字操作中的 D15 位)產生進位或借位時,C=1,否則 C=0。對於算術運算操作,可理解爲:無符號數運算後結果超出一個字節或一個字所能容納的範圍
  3. 溢出標誌O(Overflow Flag)。在算術運算操作中,如果帶符號數運算後結果超出一個字節或一個字所能容納的範圍(在帶符號數情況下,一個字節所能容納的範圍
    爲 (−128)~(+127),一個字所能容納的範圍爲 (−32768)~(+32767) 時,溢出標誌 O = 1,否則O = 0。
    需要注意的是,進位和溢出並沒有必然的聯繫,兩個數進行相加減,結果有進位時不一定有溢出,有溢出時也不一定有進位。
  4. 輔助進位標誌 A(Auxiliary Carry Flag)。在執行加減運算指令時,如果低半字節的高位向前一位有進位或借位(即D3位向D4位有進位或借位),則 A=1,否則A=0。
  5. 零標誌Z(Zero Flag)。如果指令執行結果爲0,則Z=1,否則 Z=0。
  6. 奇偶標誌 P(Parity Flag)。在字節操作指令中,如果結果中“1”的個數爲偶數,則
    P=1,否則 P=0;在字操作指令中,如果結果的低字節(即 D7~D0)中“1”的個數爲偶數,則
    P=1,否則P=0。高字節部分(即D15~D8)並不影響奇偶標誌位。
  7. 方向標誌D(Direction Flag)。方向標誌主要對串操作指令產生影響。當D=1時,串操作指令會從高地址開始向低地址處理串,且每處理完串中一個數據,串指針就會自動減小;當 D=0 時,串操作指令會從低地址開始向高地址處理串,並使串指針自動增加。方向標誌位可以通過指令CLD、STD來清零和置“1”。其他指令都不會對該標誌位產生影響。
  8. 中斷允許標誌I(Interrupt-enable Flag)。當中斷允許標誌I=1時,允許CPU接收外部的可屏蔽中斷請求,I=0 時則屏蔽掉這些請求。需要注意的是,中斷允許標誌位只對外部可屏蔽中斷(出現在 INTR 線上的中斷請求)有效,對外部非屏蔽中斷(出現在 NMI 線上的中斷請求)以及CPU內部中斷(如除法溢出引起的中斷等)都無效。中斷允許標誌位可以通過指令CLI、STI 來清零和置“1”。
  9. 追蹤標誌 T(Trace Flag)。當追蹤標誌位T=1時,CPU進入單步運行狀態,每執
    行一條指令後,CPU都會產生一個內部中斷,使程序暫停運行,以方便程序員對程序的跟蹤和檢查(也就是DEBUG時的步進);當T=0時CPU可恢復正常狀態。在8086系統中,並沒有指令可以直接修改追蹤標誌位 T。但可以利用將標誌寄存器的內容壓入堆棧間接修改,之後再送回給標誌寄存器,來實現 T 標誌位的修改。

以上內容可能讓你看得眼暈。其實你需要做到的是能夠掌握常用命令對6個狀態標誌位的影響。具體可以看我關於加減法的文章哦。

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