Search code examples
assemblystackuser-inputnasmreverse

Assembly Stack - Reverse Input and print out


I am trying to solve an exercise I got. The task is, to read 10 integers from the terminal and print them out in reversed order. To do this the stack should be used. I've tried this:

%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

When I execute the program and enter all the numbers from 1 to 10 successively I get the following result:

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

Solution

  • Just remove the line add esp, 4.
    The stack pointer is already incremented by pop eax.