天天看点

Unhandled exception :Integer overflow

错误问题: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;
}