0

与えられた文字列を反転するプログラムを書いたのですが、結果が一致しなかったようです。

forward と backward を使用して交換するインデックスを示し、最後にヌル文字を末尾に追加します。

結果は

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

何か問題があるようですが、バグがどこにあるのかわかりません。

どこが間違っている可能性があるかを見つけるのを手伝ってもらえますか?

事前にt​​hx。

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
4

1 に答える 1

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は文字列の最後の要素ではなく、最後から1つ(0バイト)を指しているので、最初にそれを読みます。

于 2013-03-20T21:07:19.960 に答える