变量神秘地改变它的价值(至少对我来说)

时间:2014-09-04 21:13:54

标签: assembly x86 nasm

好的,我觉得有点尴尬。我有这个小小的汇编程序"程序":

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,我没有对这个变量做任何进一步的事情,所以它不应该改变。但它已经改变了。为什么?发生了什么事?

1 个答案:

答案 0 :(得分:3)

在NASM语法中,

dw表示"保留字"。 A"字"在x86架构中是2个字节,或16位,主要是由于历史原因。 32位数据称为"双字"。在NASM语法中,dd可用于"保留双字"。

var dw 0x0更改为var dd 0x0后,该程序按预期工作。值1835008(0x001c0000)显然包含恰好位于var起始地址之后的其他一些数据。