我写了一个程序来反转它给出的字符串,但是结果似乎不匹配。
我使用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字节),所以首先读取它