Assembly 在汇编中反转字符串
所以我的代码有问题,我试图反转字符串,所以输出以“gnits ecruos eht si sihT”结尾。然而,我似乎无法解决这个问题Assembly 在汇编中反转字符串,assembly,x86,Assembly,X86,所以我的代码有问题,我试图反转字符串,所以输出以“gnits ecruos eht si sihT”结尾。然而,我似乎无法解决这个问题 INCLUDE Irvine32.inc ;Data section declaring variables .data source BYTE "This is the source string",0 target BYTE SIZEOF source DUP('#') ;main code .code main PROC
INCLUDE Irvine32.inc
;Data section declaring variables
.data
source BYTE "This is the source string",0
target BYTE SIZEOF source DUP('#')
;main code
.code
main PROC
mov esi,0
mov edi,LENGTHOF source - 2
mov ecx,SIZEOF source
L1:
mov al,source[edi]
mov target[edi],al
inc esi
dec edi
loop L1
mov edx, OFFSET target
call WriteString
Invoke ExitProcess,0
main ENDP
END main
你打错了。对于
源
,您使用了edi
而不是esi
。PS:学习使用调试器。PPS:您的目标
不会正确地以零结尾,并且您的ecx
似乎太多了。我正在尝试学习一种新的方法来慢慢学习@Jester@Jester那么,您是否建议对代码进行一些改进,以提高效率,或者它的性能如何?如果您希望提高效率,您可以使用bswap
一次使用4个字节,或者使用pshufb
一次使用SSSE3 16个字节。但是在这一点上,你应该主要担心正确性。您也可以使用指向开始/结束的指针反转一个字符串;发现它们在中间相遇或交叉。(那么您的循环条件可能只是cmp-esi、edi
/ja-L1
或其他东西)。这将简化0-terminating@PeterCordes我在大学里上汇编语言入门课,所以我们的教授不想让我们做任何复杂的事情。我只是想知道我的代码到目前为止是否足够好,能够获得所需的输出?