为什么这两个变量在 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

将纠正您观察到的行为。