为什么从堆栈初始化会在 GNU GAS (AT&T) 中产生奇怪的结果

Why does initialising from stack yeld weird result in GNU GAS (AT&T)

我是个汇编小白。我正在尝试从堆栈中初始化变量(即在实际情况下,它们的值由第三方推送到堆栈中)。代码类似这样:

.data
b:
        .long   0
a:
        .long   0

        .global main
        .text
main:
        push 
        pop b
        push 
        pop a

无论如何,我希望 a 中有 1 个,b 中有 2 个。相反,我在 a 中有 1,在 b 中有 cruft(尽管它在执行之间是静态的)。我做错了什么?

非常感谢您。

你做错了两件事:

  1. 没有显示确切的代码,只是一些东西 "similar"。
  2. 未显示您如何检查该值。

代码按原样运行:

(gdb) p a
 = 1
(gdb) p b
 = 2