關於標誌暫存器的簡單總結

2022-09-20 10:15:08 字數 2903 閱讀 1681

標誌暫存器的標誌位,是對資料邏輯運算的結果進行特殊標記。比如兩個數相加是否產生了資料外溢,相減結果是否為零等等。通過對運算結果的標記,來進行判斷下一步執行的語句,從而達到分支語句的作用(跳轉)等操作。因此對標誌暫存器的理解學習尤為重要。

add

subxor

orand

....

;注意:資料移動操作不能影響標誌暫存器,如mov

標記了運算結果是否為零,如果為零,那麼該標誌位為1,反之為0。

可用於兩個數值比較,如果兩個數值相同,那麼兩個數相減的結果一定為0,相反如果結果不為0,那麼兩個數值不相等。

運算結果的二進位制數值中的最低有效位元組(末尾的八位),如果1的個數是奇數,那麼標誌位為0,反之1的個數為偶數,標誌位為1

主要用於檢查資料傳送過程中的錯誤

在上述結果上再次加二,觀察結果

1)進製標誌:在運算過程中,如果產生了向高位進製或借位的情況,那麼該標記位置為1,反之置為0

2)溢位標誌:在運算過程中,運算結果超出了暫存器最大表示範圍,如:兩個正數相加結果變為了負數

1)進製標誌:如果我們計算乙個非常大的加法運算時,需要多個dword空間存放乙個運算數。

如下十六進製制運算過程

00000001 ffffffff

+ 00000000 00000001

----------------------

00000002 00000000

1)上述運算過程在人眼下能夠一眼算出答案,但是計算機需要進行分步操作,原因是32位作業系統,運算元據的最大範圍是32位(八位十六進製制數)

2)因此,需要對每個對應的32位資料依次進行加法運算

3)首先將ffffffff與00000001相加,結果為0000000,但是此時的標記位cf為1

4)利用帶進製加法adc指令運算00000001與00000000的相加,那麼將會在結果的基礎上加上標記位

5)也就是1 + 0 + 1

2)溢位標誌:判斷結果是否產生了溢位,正溢|負溢

兩個標記位都是記錄了資料運算過程中的進製問題,但是記錄的角度不同。發生進製不一定發生溢位,比如負數加上正數,永遠不會溢位但是會產生進製。同樣的發生溢位也不一定發生進製,如兩個正數相加,結果最高為被置為1時,將結果看作是有符號數時,那麼就等同於:正數 + 正數 = 負數,產生了溢位,但是沒有產生進製。

1)將運算資料看做無符號數:進製標誌

2)將運算資料看做有符號數:溢位標誌

1)進製標誌

;向高位進製測試**

mov eax,0x0 ;將eax清空,方便觀察

;向高位借位測試**

2)溢位標誌

;正溢位**,兩個正數相加,結果變為負數

;負溢位**,兩個負數相減,結果變為正數

當前操作的資料寬度的中間位置發生了進製/借位操作時,該標記位被置為1,反之為0

如八位的運算元據,位置1向位置2進製或借位時輔助進製標誌發生變化(16位,32位同理):

資料的運算結果是負數時,標記位置為1,反之置為0

mov eax,0x0

mov al,0x7f

add al,0x1

例如在執行movs指令時,如果標誌位置為1,那麼esi、edi同時減4,反之標誌位為0時,esi、edi同時加4

涉及到程式的單步執行

標誌暫存器df 關於標誌暫存器的各個標誌

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

標誌暫存器df 標誌暫存器

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

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...