漫談計算機組成原理(九·續)定點數的除法運算

本文講什麼?

在上一篇文章中,咱們主要講述了定點數的加、減、乘運算,惟獨沒有講解除法運算。緣由有兩個,一來上一篇文章的內容確實比較多,二來除法運算比乘法相對複雜。
因此,本文將從除法的來歷講起,而後講除法運算的幾種方法。微信

除法運算的造成

咱們來看這樣一個例子:在8位寄存器中存儲了00000111,4位寄存器中存儲了0010,計算00000111/0010。
回想一下,咱們整數的除法是怎麼作的?如上面的數改寫成十進制,即7/2的結果是多少呢?
咱們確定是先列出一個除法式子,像下面這樣。
設計

咱們首先是判斷一下,當前被除數7中有幾個除數,有幾個則商就上幾個,而後被除數減去除數乘商獲得餘數,接着判斷餘數中有幾個除數,直到除不開爲止。若是發現商是0,則被除數補0,除數向右移動一位,繼續計算。
在7中有3個2,結果是餘1,1中不存在2,這就是最終的結果。
接着看一下上面的例子:咱們要作的,確定是先列出一個式子。
3d

和整數除法同樣,兩個二進制數之間的除法一樣的。步驟以下:cdn

  • 要判斷被除數中有幾個除數
  • 有幾個則商上幾,有n個除數商就是n(二進制除法中,結果不是1就是0)
  • 被除數-n*除數 = 被除數’
  • 除數向右移動一位
  • 繼續上述過程,獲得最終結果

大致上的過程就是這樣的。根據上述的過程,咱們可以很容易的設計出基本的除法器。此外,要注意的是,除法器應該具備判斷除數或者被除數是否爲0的功能,由於被除數爲0時結果爲0,沒有意義;而除數爲0時,結果爲無窮大,沒法表示。blog

計算機定點數除法運算的幾種方法

在瞭解了除法器的基本狀況後,咱們就來說除法運算的兩種方法。分別是:恢復餘數法、加減交替法。it

恢復餘數法

從名字中能夠看出,這種方法對餘數作了某種恢復。爲何會出現這種恢復呢?緣由很簡單,咱們在分析通常除法的過程當中能夠看到,若是除數和被除數當前對齊的位上,被除數有0個除數,此時咱們就須要將被除數補0。可是計算機並不知道被除數是否夠除除數(由於無論除數和被除數的狀況如何,最後的商上的位,不是0就是1),就須要先用被除數減去除數,若是發現餘數是小於0的,那麼計算機就知道了此時對齊的位沒法獲得最終的結果,則將被除數向又移動一位。這就是恢復餘數法的核心思想。固然,咱們在直接計算的時候,須要將兩個數的絕對值相除,再獲得最終的結果。
接下來咱們就來看,恢復餘數法到底是如何運算的。io

  • 例子:x=-0.1011,y=-0.1101,求[x/y]
    由於須要使用兩個數的絕對值運算,因此咱們先獲得兩個數的絕對值。
    [x]=1.1011,[x*]=0.1011;[y]=1.1101,[y*]=0.1101。
    還有,在運算時,由於涉及到兩個數的減法,因此咱們須要獲得[-y*]
    [-y*]=1.0011.計算過程以下表。


    初始化的時候,被除數放到被除數的位置,而商爲0.先減去除數,若是餘數爲正,則商上1,不然上0,接着將被除數加上除數。不管哪一種狀況,都須要將被除數向左移動一位。這就是恢復餘數法的過程。最終,別忘了使用異或操做獲得符號位,才能獲得最終結果。

加減交替法

加減交替法也稱做不恢復餘數法。爲啥呢,由於在加減交替法中,先讓被除數減除數,若是結果爲正,則上1,;若是結果爲負,則加上除數。接着將被除數向作移動一位。不過你要是細看的話,這兩種方法其實並無太大的區別,本身好好體會一下就好了。
下面看個例子:class

  • 例子:x=0.1011,y=0.1101,求[x/y]
    [x]=1.1011,x*=0.1011;[y]=0.1101,y*=0.1101,[-y*] = 1.0011。
    計算過程以下:

結語

本節是承接定點數的計算方法的,下一節,咱們將開始計算機的運算方法後半部分的內容,即浮點數的計算過程,內容並很少,因此會放到一篇文章中。
若是你喜歡個人文章,歡迎關注個人微信公衆號:最高權限比特流原理

**參考:《計算機組成原理》唐朔飛**
相關文章
相關標籤/搜索