我试图在汇编中简单地总结一个数组。
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
我尝试了各种各样的东西,但我似乎无法将它与数组相加。
答案 0 :(得分:3)
看起来您没有将esi
初始化为任何内容,因此它在循环开始时包含一些随机值。
此外,由于a
存在于非固定位置(毕竟它是一个局部变量),您应该将a
的地址加载到寄存器中第一:
lea ebx, a
...
add eax, [esi*4+ebx]
我怀疑你的内联汇编程序使用[esi*4+a]
做错了。