排除反向字符串

时间:2013-03-20 21:02:28

标签: assembly x86 masm irvine32

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

我使用foward和back来指示要交换的索引,最后添加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

1 个答案:

答案 0 :(得分:1)

改变这个:

    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字节),所以你先读它。