gpt4 book ai didi

x86 - 为什么在调用 jnz 之前要将一个值与其自身进行“或”操作?

转载 作者:行者123 更新时间:2023-12-02 14:49:35 25 4
gpt4 key购买 nike

我正在阅读一些执行以下操作的代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com