Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在汇编中反转字符串_Assembly_X86 - Fatal编程技术网

Assembly 在汇编中反转字符串

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

所以我的代码有问题,我试图反转字符串,所以输出以“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              
    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我在大学里上汇编语言入门课,所以我们的教授不想让我们做任何复杂的事情。我只是想知道我的代码到目前为止是否足够好,能够获得所需的输出?