2015-02-10 25 views
0

檢查這個代碼出奇偶標誌得到混合與「1和0」

include 'win32ax.inc' 

;.data 


.code 

start: 

mov al,00000001b 

add al,00000001b ;even =2  pf = 0 
add al,00000001b ;odd =3  pf = 1 
add al,00000001b ;even =4  pf = 0 
sub al,00000001b ;odd =3  pf = 1 
sub al,00000001b ;even =2  pf = 0 
sub al,00000001b ;odd =1  pf = 0 
sub al,00000001b ;even =0  pf = 1 

.end start 

最後兩個減法指令應設定PF = 1的結果,則PF = 0,那麼,爲什麼不呢?

另外我使用FASM,我正在用ollydbg調試器進行調試。

回答

0

從維基百科:

在x86處理器,奇偶標誌反映了奇偶只的結果的最低顯著字節,並且被設定,如果那些的集合的位的數目是偶數。

所以

result = 0 an even number of ones are set so pf = 1 is the right answer 
result = 1 an odd number of ones are set so pf = 0 is the right answer 
result = 2 an odd number of ones are set so pf = 0 is the right answer 
result = 3 an even number of ones are set so pf = 1 is the right answer 

1 = 0b00000001 one bit is set an odd number of bits set pf = 0 
3 = 0b00000011 two bits are set pf = 1 
7 = 0b00000111 three bits are set pf = 0 
12 = 0b00001100 two bits are set pf = 1 
+0

以及我的繼承人混亂 – noob 2015-02-10 22:01:18

+0

子人,00000001B;奇= 3 PF = 1個子人,00000001B;奇= 1 PF = 0 – noob 2015-02-10 22:01:45

+0

它們都是奇數但有不同的結果,如果它是3然後PF = 1,如果它是1 PF = 0 – noob 2015-02-10 22:04:16