2013-03-20 66 views
0

我编写了一个程序来反转它给出的字符串,但看起来结果并不匹配。排除反向字符串故障

我使用前向和后向来指示要交换的索引,并最后在尾部添加空字符 。

结果应该是

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 

它似乎有些不对劲,钻我无法找出是错误。

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

Thx提前。

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 
+0

你的结果只是转移到了一个位置,它看起来像一个非常小的错误,如果你正确调试你应该能够很容易地捕捉到它。 – Andrey 2013-03-20 21:04:53

回答

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

+0

它成功了,谢谢。但为什么必须先决定呢?我认为这是最后一个元素,因为我已经做了stringLength - 1? – 2013-03-20 21:10:34

+1

@梁玉平因为它不是字符串的最后一个元素。如果字符串的长度是3,那么元素索引是0,1,2。是的,右'stringLength - 1'。 – Andrey 2013-03-20 21:12:14

+0

哦,我明白了。谢谢!我感谢您的帮助:) – 2013-03-20 21:13:03