匯編語言標志位 含義 NV UP EI NG NZ AC PE CY


clip_image001縮寫原意:

Overflow of = OV NV [No Overflow]

Direction df = DN (decrement) UP (increment)

Interrupt if = EI (enabled) DI (disabled)

Sign sf = NG (negative) PL (positive)

Zero zf = ZR [zero] NZ [ Not zero]

Auxiliary Carry af = AC NA [ No AC ]

Parity pf = PE (even) PO (odd)

Carry cf = CY [Carry] NC [ No Carry]

==============

The individual abbreviations appear to have these meanings:

OV = OVerflow, NV = No oVerflow. DN = DowN, UP (up).

EI = Enable Interupt, DI = Disable Interupt.

NG = NeGative, PL = PLus; a strange mixing of terms due to the

fact that 'Odd Parity' is represented by PO (rather than

POsitive), but they still could have used 'MI' for MInus.

ZR = ZeRo, NZ = Not Zero.

AC = Auxiliary Carry, NA = Not Auxiliary carry.

PE = Parity Even, PO = Parity Odd. CY = CarrY, NC = No Carry.

 

調試程序DEBUG如何表達標志狀態?

溢出OVoverflowOF1

無溢出NVno overflowOF0

減量DNdirection downDF1

增量UPdirection upDF0

允許中斷EIenable interruptIF1

進制中斷DIdisable interruptIF0

NGnegativeSF1

PLplusSF0

ZRzeroZF1

非零NZno zeroZF0

輔助進位ACauxiliary carryAF1

無輔助進位NAno auxiliary carryAF0

偶校驗PEeven parityPF1

奇校驗POodd parityPF0

進位CYcarryCF1

無進位NCno carryCF0

 

 

AH&ALAX(accumulator):累加寄存器
BH&BL
BX(base):基址寄存器
CH&CL
CX(count):計數寄存器
DH&DL
DX(data):數據寄存器
SP
Stack Pointer):堆棧指針寄存器
BP
Base Pointer):基址指針寄存器
SI
Source Index):源變址寄存器
DI
Destination Index):目的變址寄存器
IP
Instruction Pointer):指令指針寄存器
CS
Code Segment)代碼段寄存器
DS
Data Segment):數據段寄存器
SS
Stack Segment):堆棧段寄存器
ES
Extra Segment):附加段寄存器
OF overflow flag
溢出標志 操作數超出機器能表示的范圍表示溢出,溢出時為1.
SF sign Flag
符號標志 記錄運算結果的符號,結果負時為1.
ZF zero flag
零標志 運算結果等於0時為1,否則為0.
CF carry flag
進位標志 最高有效位產生進位時為1,否則為0.
AF auxiliary carry flag
輔助進位標志 運算時,3位向第4位產生進位時為1,否則為0.
PF parity flag
奇偶標志 運算結果操作數位為1的個數為偶數個時為1,否則為0.
DF direcion flag
方向標志 用於串處理.DF=1,每次操作后使SIDI減小.DF=0時則增大.
IF interrupt flag
中斷標志 IF=1,允許CPU響應可屏蔽中斷,否則關閉中斷.
TF trap flag
陷阱標志 用於調試單步操作

設置 nv(清除) ov(溢出)

  方向 dn() up()

  中斷 ei(啟用) di(禁用)

  正負 ng() pl()

  零 zr(0) nz(0)

  輔助進位 ac(進位) na(不進位)

  奇偶校驗 pe(偶校驗) po(奇校驗)

  進位 cy(進位) nc(不進位)

  如:

  OV DN EI NG ZR AC PE CY依次表示OF DF IF SF ZF AF PF CF都為1;

NV UP DI PL NZ NA PO NC依次表示OF DF IF SF ZF AF PF CF都為0.

 

 

of

df

if

sf

zf

af

pf

cf

標志位為1

ov

dn

ei

ng

zr

ac

pe

cy

標志位為0

nv

up

di

pl

nz

na

po

nc

 

 

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=0100   NV UP EI PL NZ NA PO NC
1392:0100 28C0          SUB     AL,AL
-t

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=0102   NV UP EI PL ZR NA PE NC
1392:0102 B010          MOV     AL,10
-t

AX=0010  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=0104   NV UP EI PL ZR NA PE NC
1392:0104 0490          ADD     AL,90
-t

AX=00A0  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=0106   NV UP EI NG NZ NA PE NC
1392:0106 B080          MOV     AL,80
-t

AX=0080  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=0108   NV UP EI NG NZ NA PE NC
1392:0108 0480          ADD     AL,80
-t

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=010A   OV UP EI PL ZR NA PE CY
1392:010A B0FC          MOV     AL,FC
-t

AX=00FC  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=010C   OV UP EI PL ZR NA PE CY
1392:010C 0405          ADD     AL,05
-t

AX=0001  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=010E   NV UP EI PL NZ AC PO CY
1392:010E B07D          MOV     AL,7D
-t

AX=007D  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=0110   NV UP EI PL NZ AC PO CY
1392:0110 040B          ADD     AL,0B
-

AX=0080  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1392  ES=1392  SS=1392  CS=1392  IP=0108   NV UP EI NG NZ NA PE NC
1392:0108 0480          ADD     AL,80
-
另外有人在網上做了很好的總結

http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=19481&kindLevel=1&kindId=34937&postId=39398&readSg=1 

 

補碼運算時的溢出判斷

clip_image003

這里我做個腳注:即兩數原碼數值部分是什么意思

10000101

11111011 分別是同一個數的原碼與補碼,去掉最高位的符號位,相加即得128

當兩個以補碼表示的負數相加時,會遇到兩個問題。第一是兩個負數的符號位相加,1+1后,本位為零,似乎負數相加變成了正數;其二是兩個負數的數值部分之和,如果不向符號位進位,是不是就說明運算結果沒有溢出?但不進位最終將導致兩個負數相加成了正數,顯然是錯誤的,這該怎么解釋?如果兩個以補碼表示的負數的數值部分之和向符號位進位,會使運算結果依然為負數,那么這個運算結果是正確的嗎?下面我們分析一下這個問題: 

①只有真正意義上的相加才可能溢出,比如: 

   
+正,負+負,正-負,負- 

   
純粹的減法是不可能溢出的,這一點僅需常識即可作出判斷,所以遇到不是真正意義上的加法運算(當然,包括乘法和左移等)要你判斷是否有溢出,直接就可以回答:OF=0 

②兩正數之和的數值部分向符號位進位,顯然是運算結果超過了指定位數的帶符號數的表示范圍,這就是典型的溢出; 

③兩負數之和的溢出判斷是我們討論的重點。我們先考察一下負數原碼和補碼數值部分之間的關系:以8位補碼為例,負數原碼和補碼數值部分之和始終等於128(見上圖)。由於這種關系,當原碼數值大時對應的補碼數值就小,反之也一樣。所以,當兩補碼表示的負數的數值部分之和沒有向符號位進位,說明兩負數的原碼之和必然向符號位進位,即發生溢出;反之,當兩補碼表示的負數的數值部分之和向符號位進位,那么對應兩負數原碼的數值之和就不可能向符號位進位,即運算結果沒有溢出;並且在這種情形下補碼之和的數值部分向符號位的進位,修正了兩負數符號位相加本位為零的問題,使得兩負數之和依然是個負數。 
   
下面看兩個負數補碼相加溢出判斷的實例: 
例一:085h + 9ch
   = 10000101b + 10011100b
  
兩數相加,數值部分不會向符號位進位,這是不是就說明沒有溢出呢?但由於計算結果為正,顯然不對。我們還是看看兩個數的原碼之和再說: 
    10000101b
的原碼 = 11111011b(-123)
    10011100b
的原碼 = 11100100b(-100)
   
顯然,原碼之和的數值部分將向符號位進位,顯然是溢出無疑。 

例二:0e7h + 0b3h
    =11100111b + 10110011b
   
兩數相加,數值部分會向符號位進位,這進位是溢出嗎?還是看看原碼吧!
    11100111b
的原碼 = 10011001b(-25)
    10110011b
的原碼 = 11001101b(-77)
   
容易看出,兩數原碼之和沒有向符號位進位,即沒有發生溢出。 
   
其實歸結起來,補碼的溢出判斷規則就一句話: 

   
同號數相加如果結果的符號位和兩加數不同,既是溢出。 

   
這自然說明了: 
   
⑴不是同號數相加,則不可能溢出; 
   
⑵同號數相加有可能溢出; 
   
⑶同號數相加如果結果的符號位和兩加數不同,既是溢出。

評論次數(7)  |  瀏覽次數(3316)  |  類型(匯編語言) |  收藏此文  |

younggay   發表於  2009-07-22 09:59  ]

up

zhonghuade   發表於  2009-10-18 19:23  ]

老師!我覺得可以加一些實際的例子來說明補碼溢出,比如說:8位機器數運算表示范圍-128大於等於x小於等於127,發生溢出的具體情況?用實例來說明能讓我們更深刻理解溢出的含義!請您指點!謝謝!

release_lag   發表於  2009-12-31 16:48  ]

呵呵,沒想到我和樓主想到一起去了。 
=============================
回樓上的 
如果是兩個8位數據相加 
第一個加數的范圍是:0ffH~80H(負數的范圍) 
第二個加數的范圍是:0H~79H(正數的范圍) 
那么他們永遠不會溢出 
原因是他們符號不同,樓主已經說過:不同符號的兩數相加,結果不可能溢出 
同符號相加時,就檢查結果的符號,如果符號與兩個數據的符號不同時,則溢出 
例如mov al,0e0h
   add al,95H
結果是(al)=75H      75H為正數,運算溢出

游客   發表於  2011-01-01 21:53  ]

游客   發表於  2011-12-17 22:33  ]

文章很不錯,可是還有很多地方不太明白。 

1
(八位補碼溢出判斷圖示)是根據什么原理推斷出來的啊?負數原碼和補碼數值部分之和始終等於128,為什么? 

2
、只有真正意義上的相加才可能溢出,什么是真正意義上的相加? 

3
、請問什么是溢出?文中提到:兩正數之和的數值部分向符號位進位,顯然是運算結果超過了指定位數的帶符號數的表示范圍,這就是典型的溢出。運算結果超過了指定位數的帶符號數的表示范圍——這句話如何理解?不是同號數相加,則不可能溢出,超不超出范圍如何判斷?

842460904   發表於  2012-09-03 23:38  ]

理論是應該負數原碼和補碼數值之和等於128,可為什么。fc和它的補碼-4相加,即252+-4=?好像不在128-127之間。為什么,能解答下嗎。謝謝

scuzg   發表於  2012-12-20 19:05  ]

0fch展開成二進制數: 
11111100
,其中最高位是符號位,所以: 
7ch+4=80h=128
際原碼和補碼數值部分之和是128.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM