装配堆栈 - 反向输入并打印出来

Assembly Stack - Reverse Input and print out

我正在尝试解决我得到的练习。任务是从终端读取 10 个整数并以相反的顺序打印出来。为此,应使用堆栈。我试过这个:

%include "asm_io.inc"

segment .data
prompt      db  "Please enter a number: ", 0

segment .text
    global asm_main

asm_main:
    enter   0,0
    pusha   

    mov         ecx, 10         ; for loop counter

for_loop:
    mov         eax, prompt
    call        print_string    ; print prompt
    call        read_int        ; read input
    push        dword eax       ; push input to stack
    loop        for_loop

    mov         ecx, 10         ; set loop counter for output

swap_loop:
    pop         eax             ; get last input from stack
    call        print_int
    call        print_nl
    add         esp, 4          ; increment esp for next value to take from stack
    loop        swap_loop

    popa
    mov         eax, 0
    leave
    ret

当我执行程序并依次输入从 1 到 10 的所有数字时,我得到以下结果:

                    Should Be:
10                  10
8                   9
6                   8
4                   7
2                   6
-1217249280         5
-1079315368         4
0                   3
-1079315312         2
-1079315336         1

只需删除行 add esp, 4.
堆栈指针已经递增 pop eax.