2014-08-29 95 views
4

我有一些x86代碼看起來像:86 JAE指令

這是否有道理?

我以爲跳躍應該發生,因爲1大於或等於0,定義爲JAE

+0

我認爲JAE是基於進位標誌,而不是以前的指令的價值? – user997112 2014-08-29 20:59:44

+2

FWIW,JAE不會將進位標誌的值與其他值進行比較,只要進位標誌爲0,不管它爲什麼爲0,它都會跳轉。如果它是1,就像你說的那樣,跳轉不應該發生。 – 2014-08-29 22:45:22

回答

5

jaejnc相同,即如果CF == 0則跳轉。所有3個助記符(包括jnb)之間的選擇取決於程序員。 CF不是由mov設置的,而是由前面的指令設置的。在執行減法的比較指令(cmp)後推薦使用助記符jae。您可以在英特爾或AMD軟件開發人員手冊中獲得更多詳細信息。

5

jae表示如果大於或等於,則跳轉。它會跳,如果進位標誌等於0

您正在尋找jnaejb

+0

我不想找任何東西:)我正在看包含jae的代碼,CF是零並且跳沒有被採取? – user997112 2014-08-29 20:58:34

+0

你一定在看一些不對的地方,因爲這不是怎麼樣的行爲 – Nowayz 2014-08-29 21:02:39

+0

在Visual Studio中進行調試時,我可以看到進位標誌的值,當我介入時,調試器不會跳轉到分支的地址,只是繼續它。 – user997112 2014-08-29 21:06:04