跳轉語句你如何決定什麼時候使用它跳轉語句...語句,如JG JNLE JNC可以做同樣的工作,你怎麼區分它們呢?差異在彙編語言編程
4
A
回答
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個無符號整數時。
相關問題
- 1. sicxe彙編語言編程
- 2. 彙編語言
- 3. 彙編語言?
- 4. LC3彙編語言程序
- 5. 彙編語言子程序
- 6. 從彙編語言編寫C程序
- 7. .NET彙編語言
- 8. SPARC彙編語言
- 9. x86彙編語言
- 10. 彙編語言環
- 11. CMP彙編語言
- 12. 彙編語言Bubblesort
- 13. 彙編語言IA32
- 14. ARMv6彙編語言
- 15. 彙編語言 - LDI
- 16. MIPS彙編語言
- 17. 彙編語言 - 乘
- 18. MIPS彙編語言
- 19. LC3彙編語言
- 20. 8086彙編語言
- 21. 彙編語言:cbw
- 22. addi和add之間的彙編語言(MIPS)差異
- 23. 將彙編語言宏轉換爲純彙編語言
- 24. 無法在8051彙編編程語言中聲明過程
- 25. 彙編語言優化器
- 26. 彙編語言diff工具
- 27. MIPS彙編語言乘法
- 28. nasm - 彙編語言介紹
- 29. 使用x86彙編語言
- 30. 初學者彙編語言