您如何决定何时使用哪个跳转语句……JG JNLE JNC 之类的语句可以完成相同的工作,您如何区分它们?

最佳答案

当您在 CX 寄存器中有一个计数值用于限制循环中的迭代时,通常会使用 J(E)CXZ

JMP 是无条件跳转,用于退出循环、在非基于 CALL 的接口(interface)中输入 API、构建跳转表等。

Conditional jumps 用于根据先前计算的条件更改执行线程。有很多同义词(记录在我刚刚提供的链接中)并且同义词通常是出于明显的原因。例如,JAE 的意思是“如果高于或等于则跳转”。这是JNC的同义词,意思是“没有携带就跳”和JNB,意思是“不低于就跳”。您使用哪个纯粹是为了让读者可以理解您的代码:

  • 如果您刚刚完成了算术运算,您可能会对进位标志的状态感兴趣,因此您可以将其编码为 JNC。
  • 如果您刚刚进行了比较(CMP 操作),您可能会对 JAE 或 JNB 更感兴趣。您使用哪个取决于在描述逻辑时哪个最有意义。

  • 这实际上是语言设计中的一个经典问题:你是否制作了大量别名,使语法更复杂以有利于澄清语义,或者你是否以语义更难阅读为代价来限制你的“关键字”(这里是操作码助记符) ?

    关于assembly - 汇编程序中跳转语句的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2355915/

    10-11 18:41