gpt4 book ai didi

assembly - 这段汇编代码有什么作用? (测试、异或、JNZ)

转载 作者:行者123 更新时间:2023-12-02 23:42:04 26 4
gpt4 key购买 nike

1.

TEST EAX,EAX
JNZ SHORT program.00407190

2.

XOR EAX,EAX
JNZ SHORT program.00407190

如果我错了,请纠正我。谢谢你! :)

据我目前的了解:

JNZ不等于0则跳转,是否跳转取决于ZF是否设置为1。如果为1,则不会跳转。否则,它会跳。

根据我对代码 #1 的理解,TEST EAX,EAX 将检查它是否为零。如果不等于0(ZF为0),则会跳转到地址00407190。

对于代码#2
XOR EAX,EAX 会将 EAX 寄存器设置为 0。它是否设置任何标志?如果不是,JNZ指令如何判断是否跳转?

最后,为什么人们想要检查 EAX 是否为 0?请帮助我更简单和详细的解释,我还是一个初学者。

最佳答案

TESTXOR 是用于对操作数执行逻辑运算的逻辑指令。

测试指令(比较操作数)

TEST destiny, source

它对操作数进行逐位求和,但与 AND 不同,该指令不会将结果放入目标操作数,它只对标志的状态产生影响.

Source Destiny | Destiny
--------------------------
1 1 | 1
1 0 | 0
0 1 | 0
0 0 | 0 <---
<小时/>

异或指令(异或)

XOR destiny, source 

其功能是对两个操作数逐位进行逻辑异或。

Source Destiny | Destiny
--------------------------
1 1 | 0 <---
1 0 | 1
0 1 | 1
0 0 | 0 <---
<小时/>

正如您在表格中看到的:

XOR EAX,EAX 会将 EAX 寄存器设置为零。如果XOR的结果为零,则ZF将被设置。所以在这种情况下:(ZF=1)

TEST EAX,EAX 不会将结果放入寄存器,它仅对 ZF 的状态产生影响。在这种情况下,如果EAX == 0,则(ZF=1)

<小时/>

JNZ (JNE) 指令(条件跳转)

JNZ label

如果不等于或不为零,则跳转到label。如果 ZF 停用,则跳转将会完成。 (ZF=0)

关于assembly - 这段汇编代码有什么作用? (测试、异或、JNZ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18996646/

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