反串故障排除



我写了一个程序来反转它给出的字符串,但是结果似乎不匹配。

我使用forward和backward来表示要交换的索引,最后添加null字符在尾部。

结果应该是

67 6E 69 72 74 73 20 65 63 72 75 6F 73 20 65 68 74 20 73 69 20 73 69 68 54 00

但是我的结果是

00 67 6E 69 72 74 73 20 65 63 72 75 6F 73 20 65 68 74 20 73 69 20 73 69 68 00

好像有点不对劲,但我不知道哪里出了问题。

你能帮我找出哪里可能出错吗?

谢谢。

INCLUDE Irvine32.inc
.data
source BYTE "This is the source string",0;26
target BYTE SIZEOF source DUP('#')
strl BYTE 0 
foward DWORD 0
backward DWORD 0
.code
main PROC
    mov strl, LENGTHOF source;26
    dec strl; last char is 25. 26 is null
    movzx ecx, strl;count = 25 
    mov foward, 0
    movzx eax, strl
    mov backward, eax
    L1:
        mov esi, backward
        mov al,source[esi]
        dec backward
        mov esi, foward
        mov target[esi], al
        inc foward
        loop L1
    movzx esi, strl
    mov al,source[esi]
    mov target[esi], al

    mov esi,OFFSET target ; offset of variable
    mov ebx,1 ; byte format
    mov ecx,SIZEOF target ; counter
    call DumpMem
main ENDP
END main

修改如下:

    mov esi, backward
    mov al,source[esi]
    dec backward

:

    dec backward
    mov esi, backward
    mov al,source[esi]

因为:

    movzx eax, strl
    mov backward, eax

最初backward不是指向字符串的最后一个元素,而是指向最后一个元素后一个(0字节),所以首先读取它

最新更新