我想使用GCC内联汇编作为练习来计算数组元素的总和。我需要访问元素。我尝试了这段代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc) {
unsigned n = 4;
unsigned* a = malloc(sizeof(unsigned) * n);
unsigned s;
a[0] = 4;
a[1] = 1;
a[2] = 5;
a[3] = 7;
__asm__ (
".text;"
" mov %[n], %%ecx;"
" mov $0, %%eax;"
" mov $0, %%ebx;"
"l1:;"
" add %[a][%%ebx], %%eax;"
" add $1, %%ebx;"
" loop l1;"
" mov %%eax, %[s];"
: [s] "=r" (s)
: [a] "r" (a), [n] "r" (n)
);
printf("%u\n", s);
free(a);
return 0;
}
出现错误:
main.c: Assembler messages:
main.c:15: Error: junk `[%ebx]' after register
显然add %[a][%%ebx], %%eax;
行是错误的。我应该如何修改?
我也很乐意获得有关此代码优化的一些建议。