汇编语言中的数组访问

时间:2012-02-23 01:37:19

标签: macos gcc assembly inline-assembly

我试图在汇编中简单地总结一个数组。

int main(){
 int a[5] = {1, 2, 3, 4, 5};
 int result;

 _asm{
   mov ecx, 5 ;set the counter for 5
   mov eax, 0 ;zero eax
 NXT: add eax, [esi*4+a] ;add array value
      inc esi ;increase esi to read next value
      LOOP NXT ;loop back to next

   mov [result], eax ;mov eax into result

  }

 printf("result: %u",result);

无论数组的值是多少,它总是总和为2.

我正在尝试在Mac上运行。

我正在编译:

gcc -fasm-blocks -m32 -c sum.cpp

并与

联系
gcc -arch i386 -g -o sum sum.o

我尝试了各种各样的东西,但我似乎无法将它与数组相加。

1 个答案:

答案 0 :(得分:3)

看起来您没有将esi初始化为任何内容,因此它在循环开始时包含一些随机值。

此外,由于a存在于非固定位置(毕竟它是一个局部变量),您应该将a的地址加载到寄存器中第一:

lea ebx, a
...
add eax, [esi*4+ebx]

我怀疑你的内联汇编程序使用[esi*4+a]做错了。