装配堆栈 - 反向输入和打印

时间:2017-09-08 17:38:55

标签: assembly stack user-input nasm reverse

我正在尝试解决我得到的练习。任务是从终端读取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

1 个答案:

答案 0 :(得分:3)

只需删除第add esp, 4行即可 堆栈指针已增加pop eax