我正在实现一个程序集函数来反转字符串。在C中使用签名void strrev(char *str) ;调用此函数时,函数中的所有内容似乎都工作正常,使用gdb进行调试,但是在调用strrev()后打印字符串的内容只会打印空字符串。

getlast:
        cmp     byte [edi], 0
        je      reverse_string
        inc     edi
        inc     ecx
        jmp     getlast

reverse_string:
        cmp     esi, edi
        jae     reversed
        mov     al, [esi]
        mov     bl, [edi]
        mov     [esi], bl
        mov     [edi], al
        inc     esi
        dec     edi

        jmp     reverse_string

主c
void strrev(char *str) ;

int main() {
   char *str1;

   str1 = strdup("Hello World") ;
   strrev(str1) ;
   printf("str1 = \"%s\"\n", str1) ;
}

最佳答案


    cmp     byte [edi], 0
    je      reverse_string

会导致这个
    mov     bl, [edi]
    mov     [esi], bl

在字符串开头写入0。
你需要从字符串终止符后退一步。

关于c - 使用引用参数从c调用汇编函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16016829/

10-11 16:32