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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值