求教testl指令
一直不明白汇编指令的testl指令,这个指令说是将两个操作数做与来设置零标志位和负数标识,常用的方法是testl %eax,%eax来检查%eax是正数负数还是0,这是怎么实现的啊??两个%eax相与还是本身,怎设置?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
一直不明白汇编指令的testl指令,这个指令说是将两个操作数做与来设置零标志位和负数标识,常用的方法是testl %eax,%eax来检查%eax是正数负数还是0,这是怎么实现的啊??两个%eax相与还是本身,怎设置?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
标志位通过结果值来设置.
%eax = %eax & %eax
关键是%eax&%eax就是%eax本身啊
这么做有什么意义吗?
不改变%eax
而通过testl %eax,%eax却可以设置或者清除一些标志,以便实现分支结构。
其实就是对%eax 的性质做一个判断,比如它是正是负是零啊。
test语句是根据上次计算结果的性质设置相应的状态码(condition code),而testl %eax,%eax的结果就是%eax,于是就针对%eax值的属性设置状态码,例如上面说到的是正是负还是零