8086 支持兩種除法指令,除數分別是 8 位和 16 位數。
它們的商,也必須是?8 位或 16 位數。
如果,被除數過大、除數過小,商,就有可能超出預定的位數,這就是“除法溢出”。
壹旦發生“除法溢出”,就會出現:Divide? overflow,系統就要崩潰了。
當然,使用高檔次的 CPU,字長,增多壹些,可以彌補壹些這種缺點。
因此,有許多人,都不想在編程的方面下功夫,只是寄希望於新型的 CPU。
但是,在實際應用中,被除數,還是有可能非常的大。
總不能為此,等待壹個大型的 CPU 問世吧?
----------------------
實際上,用低擋次的除法指令,多次操作,也可以實現大數除法。
只要令“商的位數”和“被除數的位數”相同,就不會溢出了。(除數為零除外)
大數除法的思路,可用小學學過的除法的豎式來說明如下:
左圖,是執行最簡單的除法指令(DIV? BL)的操作示意。
右圖,是用這條指令,計算:(1A 2B 3C 4D)/ BL。
被除數有四個字節,這就需要使用四次 DIV? BL。
從而得到:四個字節的商,以及四個字節的余數。
前三次的余數,要在下壹次相除時,作為“被除數的高字節”。
最後壹次的余數,就是總的余數。
第壹次相除的高字節,要用 00H。
------------------------
圖中,僅僅畫了四個字節的被除數。
而實際上,使用這種方法,並沒有字節數的限制。
所以,無論多大的被除數,都可以求出相等字節數的商。
看看吧,很容易理解的。
看懂了,妳就可以自己編寫程序了。
如果“多字節的加減乘除”都不會編程,那就去學習?C?語言吧。