16位汇编div指令溢出
使用div指令做除法时情况如下:
被除数:FFFFFFFFh(16位允许的最大被除数,高位dx寄存器加上低位ax寄存器共32位)
除数:2h
被除数的高16位 >= 除数 所以结果必定大于16位,默认商寄存器ax仅16位,肯定会发生溢出。
网上有的解决办法是把高位dx与ax分开进行div,但是好像这样是错误的。
首先,两次除法暂存的商,无法进行合并出最终正确的商;
其次,ax默认为商寄存器,永远是无法存储超过16的div结果,必定会溢出;
那么应该如何解决这个问题呢?
我也想过,是否能将高位先乘以10000h后进行div + 低位div的商,但这样明显是行不通的,因为高危已经>=除数了
求解有没有比较完美的解决办法.