跳转语句你如何决定什么时候使用它跳转语句...语句,如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. MIPS汇编语言
- 5. 8086汇编语言
- 6. ARMv6汇编语言
- 7. x86汇编语言
- 8. 汇编语言环
- 9. 汇编语言 - LDI
- 10. CMP汇编语言
- 11. 汇编语言:cbw
- 12. MIPS汇编语言
- 13. LC3汇编语言
- 14. addi和add之间的汇编语言(MIPS)差异
- 15. 将汇编语言宏转换为纯汇编语言
- 16. 汇编语言diff工具
- 17. 了解汇编语言
- 18. 汇编语言:+ vs add
- 19. 汇编语言注册
- 20. 汇编语言介绍
- 21. 以汇编语言开头
- 22. 汇编语言x86 Irvine32
- 23. 理解ATT汇编语言
- 24. Doxygen和汇编语言
- 25. 汇编语言到C
- 26. MIPS汇编语言(Power2)
- 27. 汇编语言NASM错误
- 28. pusha汇编语言指令
- 29. 初学者汇编语言
- 30. 与汇编语言拼搏