为什么这两个变量在 NASM 中同步
Why do these two variables sync up in NASM
我是NASM的初学者,遇到了看不懂的东西。鉴于此代码:
global main
extern printf
section .text
main:
mov qword [VAR_0], 1 ; Init first variable
mov qword [VAR_1], 2 ; Init second variable
mov rdi, format ; Print first variable -> outputs 2
mov rsi, [VAR_0]
mov eax, 0
call printf
mov rdi, format ; Print second variable -> outputs 2
mov rsi, [VAR_1]
mov eax, 0
call printf
section .bss
VAR_0: resq 0
VAR_1: resq 0
section .data
format db "%d", 10, 0
为什么程序会输出
2
2
而不是
1
2
我正在用
编译它
nasm -felf64 test.s
gcc test.o
并且简单地运行它作为
./a.out
我对此束手无策。
问题是您误用了 resq
指令。正确的用法是:
IDENTIFIER: resq number_quad_words_to_reserve
在你的情况下你有:
VAR0: resq 0
这总共保留了零个四字。将其中每一项修改为:
VAR0: resq 1
VAR1: resq 1
将纠正您观察到的行为。
我是NASM的初学者,遇到了看不懂的东西。鉴于此代码:
global main
extern printf
section .text
main:
mov qword [VAR_0], 1 ; Init first variable
mov qword [VAR_1], 2 ; Init second variable
mov rdi, format ; Print first variable -> outputs 2
mov rsi, [VAR_0]
mov eax, 0
call printf
mov rdi, format ; Print second variable -> outputs 2
mov rsi, [VAR_1]
mov eax, 0
call printf
section .bss
VAR_0: resq 0
VAR_1: resq 0
section .data
format db "%d", 10, 0
为什么程序会输出
2
2
而不是
1
2
我正在用
编译它nasm -felf64 test.s
gcc test.o
并且简单地运行它作为
./a.out
我对此束手无策。
问题是您误用了 resq
指令。正确的用法是:
IDENTIFIER: resq number_quad_words_to_reserve
在你的情况下你有:
VAR0: resq 0
这总共保留了零个四字。将其中每一项修改为:
VAR0: resq 1
VAR1: resq 1
将纠正您观察到的行为。