2010-03-01 129 views

回答

4

J(E)CXZ通常用於當你有在您使用限制循環迭代的CX寄存器中的計數值。

JMP是用來退出循環,在非基於呼叫界面輸入的API,建立跳轉表無條件跳轉等

Conditional jumps用來更改基於以前的計算條件的執行線程。有很多同義詞(記載在我剛剛提供的鏈接中),同義詞通常是由於明顯的原因。例如,JAE的意思是「如果高於或等於跳躍」。這是JNC的同義詞,意思是「如果不攜帶則跳」和JNB,意思是「如果不在下面跳」。您使用純粹是使你的代碼可以理解讀者的問題:

  • 如果你只是做了一個算術運算,你可能有興趣在進位標誌的狀態,所以你」 d將其編碼爲JNC。
  • 如果你剛剛做了比較(CMP操作),你可能會更感興趣,JAE或JNB。你使用哪一個取決於描述邏輯時哪個最有意義。

這實際上是在語言設計的一個經典問題:你的犧牲使大量的別名,使得語法更復雜的有利於澄清語義的,還是你限制你的「關鍵詞」(操作碼助記符這裏)的語義難以閱讀?

4

一些助記符只是指相同的指令。如果你對比較的結果是否感興趣,請使用jG JGE等。如果你對CPU標誌設置感興趣,可以使用JC,JZ等。它只會增加代碼的可讀性

5

你提到的跳轉都是條件代碼值上的跳轉。

JG和JNLE是相同的:它們具有相同的操作碼和做同樣的事情。一個是「跳大於」,另一個是「跳不小於或等於」。想想看。這些是已簽署的分支,這意味着他們在確定是否分支時考慮標誌標誌。

JNC的意思是 「如果跳不進」。如果進位標誌沒有設置,它將跳轉。進位常用於檢測算術溢出,例如,添加2個無符號整數時。