我已经写了下面的汇编代码来将字符串从小写字母转换为大写字母,它并不完全工作,因为我无法访问字符串的地址, m转换。这段代码不工作为什么?在gcc中的内联汇编中访问字符串的地址
#include<stdio.h>
int convert(char *str)
{
char *ptr;
__asm__ __volatile__ ("movl (%1),%%ebx;"
"subl $1,%%ebx;"
"movl %%ebx,%0;"
"REPEAT: addl $1,%%ebx;"
"testl %%ebx,%%ebx;"
"je END;"
"movzbl 0(%%ebx),%%ecx;"
"cmpl $97, %%ecx;"
"jb END;"
"cmpl $122,%%ecx;"
"ja END;"
"subb $32,0(%%ebx);"
"jmp REPEAT;"
"END: movl %%ebx,(%0);"
:"=r" (ptr)
:"r" (str)
);
printf("converted string =%s\n", str);
}
int main()
{
int i;
char str[] = "convert";
i = convert(str);
return 0;
}
你的问题是什么?请问一个问题。 – fuz 2014-11-05 16:47:07
@FUZxxi:我无法访问字符串的地址,并且上面的代码不起作用! – goal4321 2014-11-05 16:55:40
你在哪一点指定'ptr'或'str'? – fuz 2014-11-05 16:56:50