當前位置:編程學習大全網 - 源碼下載 - 匯編中除法防溢出怎麽做的

匯編中除法防溢出怎麽做的

8086?CPU?本身,具有?16?位除以?8?位數、32?位除以?16?位數,兩種除法指令。

除數是 8 位時,被除數是 AX 中的 16 位數。商,是放在 AL 中。

這就要求:商,不可大於 8 位數。否則,就是“除法溢出”。

除數是 16 位時,商,是放在 AX 中,也就要求,不能大於 16 位數。

如果能滿足這些要求,妳就用壹條除法指令,就可以得到結果了。

-------------------------------

而在實際的項目中,參加運算的數據,是由現場得出的,是不確定的。

被除數,有可能很大,商,就會超出預定的位數,這就是溢出。

這時,即使使用 32?位數的除法指令,也難免溢出的問題。

由此可知,CPU?自身的指令,有局限性。不要輕易使用。

-------------------------------

為了避免溢出,就要自己編寫壹個“多字節除法”的程序。

編寫這個程序思路,很簡單。與小學時學的“除法的豎式”雷同:

左圖,是最簡單的除法指令(DIV? BL)的執行過程。

右圖,是用這條指令,做“(1A 2B 3C 4DH)/ BL”的除法運算過程。

被除數,是四個字節,所以,就需要執行四次 DIV? BL。

由此得到:四個字節的商、以及四個字節的余數。

商,也有四個字節,那麽只要 BL 不為零,這就絕對不會發生溢出。

實際上,被除數的字節數,還可以繼續增加。

那麽,按此思路,被除數,可以認為是無限大的。

  • 上一篇:全景源包
  • 下一篇:DNF:龍珠爆率變高了?玩家開20個盒子就出2個,卻表示可惜,如何?
  • copyright 2024編程學習大全網