Assembly 将数字存储到汇编语言中的变量中

Assembly 将数字存储到汇编语言中的变量中,assembly,x86,Assembly,X86,我正在试着用汇编语言写一个简单的程序来加减数字。我正在使用NASM来汇编程序。当我用gdb计算程序时,寄存器没有我期望的值,我也不知道为什么。这是我的密码。现在,我只是想弄清楚如何将一个数字存储到一个变量中,然后将该变量移动到寄存器中,因为我的代码甚至没有这样做 SECTION .data var1: db 0x1 ; assign 1 to var1 var2: db 0x2 ; assign 4 to var2 var3: db 0x4

我正在试着用汇编语言写一个简单的程序来加减数字。我正在使用NASM来汇编程序。当我用gdb计算程序时,寄存器没有我期望的值,我也不知道为什么。这是我的密码。现在,我只是想弄清楚如何将一个数字存储到一个变量中,然后将该变量移动到寄存器中,因为我的代码甚至没有这样做

SECTION .data
    var1: db 0x1      ; assign 1 to var1
    var2: db 0x2      ; assign 4 to var2
    var3: db 0x4      ; assign 6 to var3
    var4: db 0x8      ; assign 8 to var4

SECTION .bss
                   ; empty for now

SECTION .text
global _start

_start:

    nop                        ; keep gdb happy
    mov eax, [var1]            ; keep gdb happy


... more code ...

    mov eax, 1                 ; clean up
    mov ebx, 0
    int 80H

现在,当我在gdb中打开程序并在第一次赋值后查看eax时,值是0x10806,而不仅仅是0x1。为什么会这样

因为EAX是32位,而您要移动一个字节,所以只有AL被更改,寄存器的其余部分将保留先前的值。我建议您首先将EAX寄存器归零(例如使用
xor EAX,EAX

EAX寄存器是一个32位寄存器,变量是第位值。当您尝试将一个变量读入寄存器时,您将得到所有四个变量

您可以将32位变量与
dd
声明一起使用,而不是
db

var1: dd 0x1      ; assign 1 to var1
var2: dd 0x2      ; assign 2 to var2
var3: dd 0x4      ; assign 4 to var3
var4: dd 0x8      ; assign 8 to var4

这么简单,却让我疯狂了一个小时……谢谢!