如何在GCC内联汇编中访问数组元素?

时间:2018-08-17 15:20:03

标签: c gcc assembly att

我想使用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;行是错误的。我应该如何修改?

我也很乐意获得有关此代码优化的一些建议。

0 个答案:

没有答案