使用push和pop方法反转字符串

时间:2016-10-23 18:32:27

标签: assembly x86

我似乎无法让程序使用push和pop工作,基本上我想按字符串并以相反的顺序弹出字符串。我在我的书中看到了一个例子并尝试将这个例子用于我的问题,当我运行程序时,我不会弹出字符串

.model small
.stack 100h
 .data
message BYTE "This is a string",0
reverse = ($ - message) - 1

.code
main proc
    mov ax, @data
    mov ds, ax

    ; push on to the stack
    mov cx, reverse
    mov si,0

L1: 
    mov ax, message[si]     ;get character
    push ax                 ;push on stack
    inc si
    loop L1

    ;Pop the name from the stack, in reverse,
    ; and store in the reverse array.

    mov cx, reverse
    mov si, 0   

L2:
    pop ax                  ;get character
    mov message[si], al    ;store in string
    inc si
    loop L2

    mov dx,OFFSET message   ;display name

    mov ax, 4c00h
    int 21h
    int 20h


main endp
end

1 个答案:

答案 0 :(得分:1)

您希望反向字符串存储在哪里?在开始第二个循环之前,您没有将SICX归零,因此您只需覆盖过去message的任何内容(即nameSize以及可能的代码)。