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

时间:2014-10-05 23:27:06

标签: assembly x86

我试图在程序集中编写一个简单的程序来添加和减去数字。我正在使用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。为什么会这样?

2 个答案:

答案 0 :(得分:3)

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

您可以使用带有dd声明的32位变量代替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

答案 1 :(得分:0)

因为EAX是32位并且你正在移动一个字节,所以只有AL被改变,寄存器的其余部分将保留为先前的值。我建议你首先将EAX寄存器归零(例如xor eax, eax