首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编程序设计中跳转语句的差异

汇编程序设计中跳转语句的差异
EN

Stack Overflow用户
提问于 2010-03-01 21:02:03
回答 3查看 6.2K关注 0票数 4

你如何决定什么时候使用JNLE这样的jump statement...statements可以做同样的工作,你如何区分它们?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-01 21:28:09

J(E)CXZ通常用于CX寄存器中的计数值,用于限制循环中的迭代次数。

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

Conditional jumps用于根据先前计算的条件更改执行线程。有很多同义词(在我刚刚提供的链接中有说明),这些同义词通常是出于显而易见的原因。例如,JAE的意思是“高于或等于跳转”。这是JNC和JNB的同义词,JNC的意思是“如果没有进位就跳”,JNB的意思是“如果不低于就跳”。你使用哪一个纯粹是为了让你的代码更容易被读者理解:

  • 如果你刚刚做了一个算术运算,你可能会对进位标志的状态感兴趣,所以你应该把它编码为JNC.
  • 如果你刚刚做了一个比较(CMP操作),你可能对JAE或JNB更感兴趣。您使用哪一个取决于在描述逻辑时哪一个最有意义。

这实际上是语言设计中的一个经典问题:你是否制作了很多别名,从而使语法更加复杂,从而有利于澄清语义,或者你是否限制了你的“关键字”(这里是操作码助记符),而牺牲了语义的可读性?

票数 4
EN

Stack Overflow用户

发布于 2010-03-01 21:07:44

您提到的跳转都是条件代码值的跳转。

JG和JNLE是一样的:它们有相同的操作码,做同样的事情。一个是“大于跳转”,另一个是“不小于等于跳转”。想想看。这些都是带符号的分支,这意味着它们在确定是否要进行分支时会考虑符号标志。

JNC的意思是“如果没有进位就跳转”。如果进位标志未设置,它将跳转。进位通常用于检测算术溢出,例如,当添加2个无符号整数时。

票数 5
EN

Stack Overflow用户

发布于 2010-03-01 21:06:32

一些助记符只是引用相同的指令。如果您对比较结果感兴趣,请使用CPU等。如果您对jG标志集感兴趣,请使用JC、JZ等,它只会增加代码的可读性

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2355915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档