鱼C论坛

 找回密码
 立即注册
查看: 740|回复: 8

[已解决]为什么and结果返回错误“”

[复制链接]
发表于 2023-10-25 13:25:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
左上角图中,为何and运算后eax为0呢,
是我xdbg的问题吗,请问and和test分别什么情况下设置zf值为1或0?

                               
登录/注册后可看大图

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

0x10转成二进制是多少?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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值时的情况是相似的,都是根据运算结果来设置的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢!如图所示,10 and 3,结果为2才对,有什么原因导致eax为0 吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

10 and 3   ?
10和3的前面还有个0x了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-25 14:14:33 | 显示全部楼层

谢谢!and运算时,十进制10,或十六进制0x10,都转为二进制1010吗,
看你的代码c语言里似乎有区别。
xdbg里,总是默认带上0x前缀,但终究是二进制位比较,为何结果为0呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

1.png
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-25 15:18:14 | 显示全部楼层    本楼为最佳答案   
vigiles163com 发表于 2023-10-25 14:14
谢谢!and运算时,十进制10,或十六进制0x10,都转为二进制1010吗,
看你的代码c语言里似乎有区别。
xd ...

0x10转成二进制是多少?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-25 15:42:43 | 显示全部楼层
人造人 发表于 2023-10-25 15:18
0x10转成二进制是多少?

刚刚有人提醒了,应该是a 。谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表