我是新來的x86彙編程序,很難正確解釋所有條件跳轉和測試。我有這樣的代碼:裝配-TEST dx,dx後面跟着jg
sbb dx, dx
test dx, dx
jg short loc_17C7
這是我讀到代碼:sbb
之前,CF
被設置或沒有,所以sbb dx, dx
的結果是,你要麼-1或dx
0。
但是然後test dx, dx
永遠不會導致將使jg
跳躍的標誌的任何組合。維基百科說
測試操作將標誌CF和OF設置爲零。 SF被設置爲AND的結果的MSB。如果的,結果是0,則ZF設置爲1,否則設置爲0。
如果dx
爲-1,這將導致OF=0 SF=1 ZF=0
(-1應該是二進制全1,所以MSB必須爲1,從而SF = 1)
如果dx
是0,這將導致OF=0 SF=0 ZF=1
但是jg
僅當且僅當跳躍ZF=0 and SF=OF
。在案例1中,SF!=OF
。在情況2下,ZF!=0
。
那麼我在這裏錯過了什麼?
我相信你的結論是正確的。 'JGE'會有道理; 'JZ'會有意義。 'JC'而不是全部三條指令可能會更有意義(或者這些指令的反向 - 無意推測代碼無法工作) - 沒有明顯的方法來達到'jg'之後的指令 - 除非它是也許標籤爲''loc_17c7'? – Magoo 2013-04-26 05:18:23