当前位置: 代码迷 >> 汇编语言 >> 初级汇编知识,本人初学!
  详细解决方案

初级汇编知识,本人初学!

热度:500   发布时间:2013-02-26 00:00:00.0
初级汇编知识,请教大家,本人初学!!!!!!!
用div进行除法运算时,如果除数是16位的。那么ax放被除数低16位,dx放被除数高16位,商放在ax中,余数放在dx中。
如果,被除数是55555h,除数为2,那么商应该是xxxxxh(即20位的),那ax是放不下的。那不是说除数之能是16位的,只要稍微大一点,除数在小一点就有可能商是大于16位的,这样ax就存不下了。那么这样被除数应该是不能超过16位的(除数是16位的情况),这是怎么回事,请问我哪里考虑错了。

指教了!!!!!!!!!!!!

------解决方案--------------------------------------------------------
555555/2, 使用 dx:ax/2 的话, 就会出现溢出异常了. 运算方式都是有数值表示范围的. 在可能溢出时, 要么变换算法 (比如除以 2 的话可以采用移位); 要么就是增大操作数大小, 比如 edx:eax/ebx(=2)
------解决方案--------------------------------------------------------
没错,LZ的考虑是正确的,通常没有有效手段从除法溢出异常中恢复,只能结束程序然后使用调试器找出发生异常的代码位置。如果是在MS-Windows操作系统下,会弹出应用程序非法操作对话框,只能选择关闭程序或是调试。

解决方法同楼上,移位或是采用更大尺寸的寄存器
  相关解决方案