好的,我觉得有点尴尬。我有这个小小的汇编程序"程序":
section .data
var dw 0x0
section .text
global _start
_start:
nop
cmp dword [var], 0x0
mov eax, 1
mov ebx, 0
int 80h
现在,我初始化变量" var"到0x0。但是,如果我运行这个" program"通过调试器,它表示" [var]"的值。在线" cmp dword [var],0x0"实际上是1835008.现在,为什么呢?我把它初始化为0,我没有对这个变量做任何进一步的事情,所以它不应该改变。但它已经改变了。为什么?发生了什么事?
答案 0 :(得分:3)
dw
表示"保留字"。 A"字"在x86架构中是2个字节,或16位,主要是由于历史原因。 32位数据称为"双字"。在NASM语法中,dd
可用于"保留双字"。
将var dw 0x0
更改为var dd 0x0
后,该程序按预期工作。值1835008(0x001c0000)显然包含恰好位于var
起始地址之后的其他一些数据。