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

Assembly 变量神秘地改变它的值(至少对我来说),assembly,x86,nasm,Assembly,X86,Nasm,好吧,我觉得有点尴尬。我有一个小汇编程序“程序”: 现在,我将变量“var”初始化为0x0。但是,如果我通过调试器运行这个“程序”,它会说“cmp dword[var],0x0”行中“[var]”的值实际上是1835008。为什么呢?我将它初始化为0,并且没有对这个变量做任何进一步的操作,所以它不应该更改。但它已经改变了。为什么?发生了什么事?dw,在NASM语法中,意思是“保留字”。x86体系结构中的“字”是2字节或16位,主要是由于历史原因。32位数据称为“双字”。在NASM语法中,dd可用

好吧,我觉得有点尴尬。我有一个小汇编程序“程序”:


现在,我将变量“var”初始化为0x0。但是,如果我通过调试器运行这个“程序”,它会说“cmp dword[var],0x0”行中“[var]”的值实际上是1835008。为什么呢?我将它初始化为0,并且没有对这个变量做任何进一步的操作,所以它不应该更改。但它已经改变了。为什么?发生了什么事?

dw
,在NASM语法中,意思是“保留字”。x86体系结构中的“字”是2字节或16位,主要是由于历史原因。32位数据称为“双字”。在NASM语法中,
dd
可用于“保留双字”


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

dw
,在NASM语法中,表示“保留字”。x86体系结构中的“字”是2字节或16位,主要是由于历史原因。32位数据称为“双字”。在NASM语法中,
dd
可用于“保留双字”


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

dw
,在NASM语法中,表示“保留字”。x86体系结构中的“字”是2字节或16位,主要是由于历史原因。32位数据称为“双字”。在NASM语法中,
dd
可用于“保留双字”


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

dw
,在NASM语法中,表示“保留字”。x86体系结构中的“字”是2字节或16位,主要是由于历史原因。32位数据称为“双字”。在NASM语法中,
dd
可用于“保留双字”


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

噢,天哪,我以为dword是从“定义字”的“dw”推导出来的或者至少我是这样记住的,所以我认为dword是dw的助记符,认为dword代表一个单词而不是一个双字。哦,天哪,我认为dword是从“dw”中推导出来的,它代表“定义单词”或者至少我是这样记住的,所以我认为dword是dw的助记符,认为dword代表一个单词而不是一个双字。哦,天哪,我认为dword是从“dw”中推导出来的,它代表“定义单词”或者至少我是这样记住的,所以我认为dword是dw的助记符,认为dword代表一个单词而不是一个双字。哦,天哪,我认为dword是从“dw”中推导出来的,它代表“定义单词”或者至少我是这样记住的,所以我认为dword是dw的助记符,认为dword代表一个单词而不是一个双字。
section .data
var dw 0x0

section .text
  global _start
  _start:
    nop
    cmp dword [var], 0x0
    mov eax, 1
    mov ebx, 0
    int 80h