你如何决定何时使用哪个跳转声明...如JG JNLE JNC这样的声明可以做同样的工作你如何区分它们?
答案 0 :(得分:5)
你提到的跳跃都是条件代码值的跳转。
JG和JNLE是相同的:它们具有相同的操作码并执行相同的操作。一个是“如果大于”则跳跃,另一个是“跳跃,如果不小于或等于”。想一想。这些是签名分支,这意味着它们在确定是否分支时会考虑符号标记。
JNC表示“如果没有携带就跳”。如果未设置进位标志,它将跳转。 Carry通常用于检测算术溢出,例如添加2个无符号整数时。
答案 1 :(得分:4)
有些助记符只是指同一条指令。如果您对比较结果感兴趣使用jG JGE等。如果您对CPU标志感兴趣,请使用JC,JZ等。它只会提高代码的可读性
答案 2 :(得分:4)
J(E)CXZ来限制循环中的迭代。
JMP是一个无条件跳转,用于退出循环,在非基于CALL的界面中输入API,构建跳转表等。
Conditional jumps用于根据先前计算的条件更改执行的线程。有很多同义词(记录在我刚才提供的链接中),同义词通常是出于显而易见的原因。例如,JAE的意思是“如果高于或等于跳跃”。这是JNC的同义词,意思是“如果没有携带则跳转”和JNB,这意味着“如果不低于跳跃”。您使用的仅仅是让您的代码可以理解为读者:
这实际上是语言设计中的一个经典问题:你是否制作了很多别名,使语法更复杂,有利于澄清语义,或者你是否以语义为代价来限制你的“关键词”(这里是操作码助记符)难读?