- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读一些执行以下操作的代码:
OR al, al
JNZ loc_123456
如果我正确地阅读了此内容,OR
命令只是设置一个标志位,然后测试该寄存器是否没有任何非零值。
为什么要这样写,而不是这样写
CMP al, 0
JNE loc_123456
哪个更具可读性?我假设硬件在每种情况下都在做类似的事情......
最佳答案
正如您所说,OR 运算的执行会设置状态标志,您可以使用以下 JNZ(如果不为零则跳转)条件分支对其进行测试。
许多具有隐式寄存器寻址的处理器(尽管不在 x86 上)上的 OR 操作码可以编码为单个操作码。
使用 CMP al, 0 获取操作码,并为立即数参数使用额外的内存。所以它基本上只是为了节省一点内存并可能获得一点速度。
这些是早期汇编语言开发中内存匮乏时的常见做法。但这些做法一直延续到今天。
关于x86 - 为什么在调用 jnz 之前要将一个值与其自身进行“或”操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23372377/
使用IDA Pro反汇编x86 dll后,我找到了这个代码(我在pusedo-c代码中添加的注释。我希望它们是正确的): test ebx, ebx ; if (ebx == fa
1. TEST EAX,EAX JNZ SHORT program.00407190 2. XOR EAX,EAX JNZ SHORT program.00407190 如果我错了,请纠正我。谢谢你!
如果我错了,请纠正我。 这是我对JNZ和CMP的理解。 JNZ - 如果 Z 标志不为零 (1),则会发生跳转 CMP - 如果两个值相等,则设置 Z 标志 (1),否则不设置 (0) 这是我正在观看
我正在阅读一些执行以下操作的代码: OR al, al JNZ loc_123456 如果我正确地阅读了此内容,OR 命令只是设置一个标志位,然后测试该寄存器是否没有任何非零值。 为什么要这样写,而不
在 x86 汇编代码中,JE 和 JNE 与 JZ 和 JNZ 完全相同吗? 最佳答案 JE 和 JZ 只是完全相同的事物的不同名称:当 ZF(“零”标志)等于 1 时条件跳转。 (同样,JNE 和
在我的一次采访中,我在"new"原始程序集中遇到了一个非常复杂的问题(为什么 QA 在告诉我他们的 QA 基于 Python 的测试时需要 assembly 知识......?),它是这样的: 假设您
我是一名优秀的程序员,十分优秀!