我正在实现一个程序集函数来反转字符串。在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/