你如何决定什么时候使用JNLE这样的jump statement...statements可以做同样的工作,你如何区分它们?
发布于 2010-03-01 21:28:09
J(E)CXZ通常用于CX寄存器中的计数值,用于限制循环中的迭代次数。
JMP是一个无条件跳转,用于退出循环、在非基于调用的接口中输入API、构建跳转表等。
Conditional jumps用于根据先前计算的条件更改执行线程。有很多同义词(在我刚刚提供的链接中有说明),这些同义词通常是出于显而易见的原因。例如,JAE的意思是“高于或等于跳转”。这是JNC和JNB的同义词,JNC的意思是“如果没有进位就跳”,JNB的意思是“如果不低于就跳”。你使用哪一个纯粹是为了让你的代码更容易被读者理解:
这实际上是语言设计中的一个经典问题:你是否制作了很多别名,从而使语法更加复杂,从而有利于澄清语义,或者你是否限制了你的“关键字”(这里是操作码助记符),而牺牲了语义的可读性?
发布于 2010-03-01 21:07:44
您提到的跳转都是条件代码值的跳转。
JG和JNLE是一样的:它们有相同的操作码,做同样的事情。一个是“大于跳转”,另一个是“不小于等于跳转”。想想看。这些都是带符号的分支,这意味着它们在确定是否要进行分支时会考虑符号标志。
JNC的意思是“如果没有进位就跳转”。如果进位标志未设置,它将跳转。进位通常用于检测算术溢出,例如,当添加2个无符号整数时。
发布于 2010-03-01 21:06:32
一些助记符只是引用相同的指令。如果您对比较结果感兴趣,请使用CPU等。如果您对jG标志集感兴趣,请使用JC、JZ等,它只会增加代码的可读性
https://stackoverflow.com/questions/2355915
复制相似问题