1
我需要做一個sub
如果BL> 7FH
我正在使用的代碼是:jng如何在程序集中工作?
cmp bl,7fh
jng here
sub bl,bl
here:
我知道BL> 7FH因爲BL = 92 jng
是跳,如果BL不大於更大7fh
在這種情況下,BL大於7fh,爲什麼跳呢?
我需要做一個sub
如果BL> 7FH
我正在使用的代碼是:jng如何在程序集中工作?
cmp bl,7fh
jng here
sub bl,bl
here:
我知道BL> 7FH因爲BL = 92 jng
是跳,如果BL不大於更大7fh
在這種情況下,BL大於7fh,爲什麼跳呢?
條件爲jng
是簽署不大於。取決於你的意思是92或92h,當解釋爲有符號字節時,它可能是92或-110。無論如何,這小於127(7Fh),這意味着jng
應該跳。
你想要的是一個無符號的不大於(名稱爲「不在」或「低於或等於」)。即
jna here ; or jbe here
終於有了一個清晰而簡單的答案!非常感謝 :)! –
測試'> 0x7F'是一個有趣的特例。您正在測試「bl」是否設置了最高位。在比較「bl」和零之後,您可以使用經過簽名的測試進行否定。如果是最後一條指令設置標誌的結果,符號標誌('SF')將根據「bl」是否爲負來設置,所以你甚至可以省略'test'指令。但無論如何,'測試bl,bl' /'jns here' /'xor bl,bl'將會成功。 ('xor'是調零的正常選擇)。你也可以使用'cmovs ebx,something'來代替分支,但是沒有8位cmov。 –