错误问题:V c++混合编程idiv有符号除法导致Integer overflow
解决:idiv前确保edx为Zero
异或edx 或 cdq 将累加和的eax符号扩展到edx,执行后edx为0
#include <iostream>
#define NUM 3
long average(long arr[],int num);
int main()
{
long array[NUM] = { 111 ,3,-111 };
long result = average(array, NUM);
std::cout <<"result:" <<result<<"\n";
}
long average(long arr[], int num) {
long temp;
__asm {
mov ebx, arr; 存储arr基址
mov ecx, num; ecx = num
xor eax, eax; 异或清零
xor edx, edx; eax为子程序输出参数,edx为入口参数
avgasm : add eax, [ebx + edx * 4]
add edx, 1
cmp edx, ecx
jb avgasm
; xor edx, edx
; cdq
idiv ecx
mov temp,eax
}
return temp;
}