2016-01-27 36 views
1

我需要做一個sub如果BL> 7FH
我正在使用的代碼是:jng如何在程序集中工作?

cmp bl,7fh 
jng here 
sub bl,bl 
here: 

我知道BL> 7FH因爲BL = 92 jng跳,如果BL不大於更大7fh
在這種情況下,BL大於7fh,爲什麼跳呢?

+0

測試'> 0x7F'是一個有趣的特例。您正在測試「bl」是否設置了最高位。在比較「bl」和零之後,您可以使用經過簽名的測試進行否定。如果是最後一條指令設置標誌的結果,符號標誌('SF')將根據「bl」是否爲負來設置,所以你甚至可以省略'test'指令。但無論如何,'測試bl,bl' /'jns here' /'xor bl,bl'將會成功。 ('xor'是調零的正常選擇)。你也可以使用'cmovs ebx,something'來代替分支,但是沒有8位cmov。 –

回答

3

條件爲jng簽署不大於。取決於你的意思是92或92h,當解釋爲有符號字節時,它可能是92或-110。無論如何,這小於127(7Fh),這意味着jng應該跳。

你想要的是一個無符號的不大於(名稱爲「不在」或「低於或等於」)。即

jna here ; or jbe here 
+0

終於有了一個清晰而簡單的答案!非常感謝 :)! –

相關問題