vigiles163com 发表于 2023-10-25 13:25:40

为什么and结果返回错误“”

左上角图中,为何and运算后eax为0呢,
是我xdbg的问题吗,请问and和test分别什么情况下设置zf值为1或0?
https://pic3.58cdn.com.cn/nowater/webim/big/n_v28804dc17acbc441c91526890f0cec979.png
谢谢!

isdkz 发表于 2023-10-25 13:25:46

and指令是按位与操作,它将两个操作数的对应位进行与运算,并将结果存储在目标操作数中。在这个特定的情况下,and运算后eax为0的原因可能是两个操作数的对应位都为0。



关于zf(零标志位),它是一个标志位,用于指示上一次运算结果是否为零。在and指令中,如果运算结果为零,则zf被设置为1,表示结果为零;如果运算结果不为零,则zf被设置为0,表示结果不为零。



而test指令则是进行逻辑与运算,并不改变操作数的值,只是根据运算结果设置zf标志位。当test指令的操作数与操作数进行逻辑与运算后,如果结果为零,则zf被设置为1;如果结果不为零,则zf被设置为0。



所以,and和test指令在设置zf值时的情况是相似的,都是根据运算结果来设置的。

vigiles163com 发表于 2023-10-25 13:35:40

isdkz 发表于 2023-10-25 13:25
and指令是按位与操作,它将两个操作数的对应位进行与运算,并将结果存储在目标操作数中。在这个特定的情况 ...

谢谢!如图所示,10 and 3,结果为2才对,有什么原因导致eax为0 吗

人造人 发表于 2023-10-25 14:01:01

vigiles163com 发表于 2023-10-25 13:35
谢谢!如图所示,10 and 3,结果为2才对,有什么原因导致eax为0 吗

10 and 3   ?
10和3的前面还有个0x了

人造人 发表于 2023-10-25 14:02:51

sh-5.1$ cat main.c
#include <stdio.h>

int main(void) {
    printf("10 and 3: %d\n", 10 & 3);
    printf("0x10 and 0x3: %d\n", 0x10 & 0x3);
    return 0;
}
sh-5.1$ ./main
10 and 3: 2
0x10 and 0x3: 0
sh-5.1$

vigiles163com 发表于 2023-10-25 14:14:33

人造人 发表于 2023-10-25 14:02


谢谢!and运算时,十进制10,或十六进制0x10,都转为二进制1010吗,
看你的代码c语言里似乎有区别。
xdbg里,总是默认带上0x前缀,但终究是二进制位比较,为何结果为0呢

人造人 发表于 2023-10-25 15:17:25

vigiles163com 发表于 2023-10-25 14:14
谢谢!and运算时,十进制10,或十六进制0x10,都转为二进制1010吗,
看你的代码c语言里似乎有区别。
xd ...

看起来你得去补一下进制转换的知识了


人造人 发表于 2023-10-25 15:18:14

vigiles163com 发表于 2023-10-25 14:14
谢谢!and运算时,十进制10,或十六进制0x10,都转为二进制1010吗,
看你的代码c语言里似乎有区别。
xd ...

0x10转成二进制是多少?

vigiles163com 发表于 2023-10-25 15:42:43

人造人 发表于 2023-10-25 15:18
0x10转成二进制是多少?

{:10_266:} 刚刚有人提醒了,应该是a 。谢谢!
页: [1]
查看完整版本: 为什么and结果返回错误“”