PUSH数据堆栈和POP并循环打印(emu8086)

时间:2014-08-09 20:13:22

标签: assembly x86-16

这是我的计划。我正在使用" emu8086"。它应该从用户那里获取5个字符并将它们推送到堆栈然后弹出并打印它们。例如。输入12345,输出54321.该代码有效,但在打印堆栈中的数据后,还会打印一些其他字符。这有什么不对吗?

.data

.code

main proc    

    mov cx, 5
    l1:
    mov ah, 1h
    int 21h   
    mov ax, ax
    push ax
    loop l1

    l2:
    pop cx
    mov dx, cx
    mov ah, 2h
    int 21h
    loop l2

endp
end main

...输出 http://s16.postimg.org/5zr9gmfvl/Untitled111.png

2 个答案:

答案 0 :(得分:1)

您不必使用堆栈。 将si设置为字符串的末尾,使用STD设置direction-reversing-flag。 现在,每个lodsb或lodsw都会降低SI而不是增加SI。不要忘记使用CLD清除方向反转标记。

答案 1 :(得分:0)

l1:循环结束后执行此操作。 pop1l2:

    mov cx,5

pop1:
    pop dx
    ;mov dx, cx
    mov ah, 2

    int 21h
    loop pop1