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