注:下面說到的標誌寄存器都是縮寫,C就是CF,其他也一樣
標誌寄存器:C、P、A、Z、S、T、D、O的內容只會是0或1,0表示假,1表示真
- O:溢出標誌
一個寄存器如果存放的值超過所能表示的範圍,就稱爲溢出,O溢出時被置爲1,否則,O的值被清爲0。
比如說EAX存放的最大值是11111111…(32個)轉成16進制是7FFFFFFF,如果再加一就會溢出,我們用OD,修改當前的EAX值爲7FFFFFFF,在執行add eax,1
就會溢出,觀察O標誌位。
執行,O標誌位爲1了,表示發生了溢出
- P:奇偶標誌位,偶數爲1,奇數爲0,
一條指令的結果轉爲二進制,偶數個1,P=1,奇數個1,P=0.
當前EAX的值爲0,0個1,所以P=1
我們讓eax加1,十六進制的1轉爲二進制,1的個數爲奇數,所以P=0
- Z:0標誌,如果一條語句的計算結果是0,Z=1,不是0,Z=0
EAX修改成-1,再加1
我們可以看到,結果爲0,Z=1
- S:符號標誌位,如過指令運算結果是負數,S=1,反之,S=0
我們看到現在的EAX是-8,我們讓EAX加1,結果是-7,S=1
- C:進位標誌位,無符號運算的結果超過寄存器存放的最大值,C=1,沒有超過,C=0
設置EAX爲FFFFFFFF,此時爲EAX存放的最大值,再讓EAX加一,C=1
A、T、D基本用不到,A是輔助進位標誌位,T是定時器溢出標誌,D是方向標誌位,就不詳細介紹了