我有点像'noob',但我不明白为什么“print WeirdValue”使用此代码返回“16777216”(1000000000000000000000000):
section .data
Var db 0
WeirdValue db 0
在
时section .data
Var dd 0
WeirdValue db 0
它返回'0'。
我使用的是64位系统,我正在使用命令
nasm -f elf32
用于汇编代码。
有人有线索吗?
答案 0 :(得分:4)
“db”声明一个字节。 16777216不适合一个字节,因此您的打印功能正在打印一个双字(可以使用“dd”声明,您在第二个示例中使用了该字)。它正在打印正确的值(即低位字节为0),并且它打印奇数的原因是因为在地址[WeirdValue + 3]处有一个字节当时包含0x01。
编辑 - 我注意到你两次都使用“db” - 我的猜测是后一个代码使WeirdValue更接近8字节对齐值的边界。
答案 1 :(得分:0)
问题解决了。 正如Score_Under所指出的,“print WeirdValue”将变量打印为双字,而它是一个字节;不知道为什么。 我只是用“x / b& WeirdValue”(/ b = byte)检查变量的值。
感谢您的帮助; - )。