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


本文講什么?

在上一篇文章中,我們主要講述了定點數的加、減、乘運算,唯獨沒有講解除法運算。原因有兩個,一來上一篇文章的內容確實比較多,二來除法運算比乘法相對復雜。
所以,本文將從除法的來歷講起,然后講除法運算的幾種方法。

除法運算的形成

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

我們首先是判斷一下,當前被除數7中有幾個除數,有幾個則商就上幾個,然后被除數減去除數乘商得到余數,接着判斷余數中有幾個除數,直到除不開為止。如果發現商是0,則被除數補0,除數向右移動一位,繼續計算。
在7中有3個2,結果是余1,1中不存在2,這就是最終的結果。
接着看一下上面的例子:我們要做的,肯定是先列出一個式子。

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

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

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

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

在了解了除法器的基本情況后,我們就來講除法運算的兩種方法。分別是:恢復余數法、加減交替法。

恢復余數法

從名字中可以看出,這種方法對余數做了某種恢復。為什么會出現這種恢復呢?原因很簡單,我們在分析一般除法的過程中可以看到,如果除數和被除數當前對齊的位上,被除數有0個除數,此時我們就需要將被除數補0。但是計算機並不知道被除數是否夠除除數(因為不管除數和被除數的情況如何,最后的商上的位,不是0就是1),就需要先用被除數減去除數,如果發現余數是小於0的,那么計算機就知道了此時對齊的位無法得到最終的結果,則將被除數向又移動一位。這就是恢復余數法的核心思想。當然,我們在直接計算的時候,需要將兩個數的絕對值相除,再得到最終的結果。
接下來我們就來看,恢復余數法究竟是如何運算的。

  • 例子: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,;如果結果為負,則加上除數。接着將被除數向做移動一位。不過你要是細看的話,這兩種方法其實並沒有太大的區別,自己好好體會一下就行了。
下面看個例子:

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

結語

本節是承接定點數的計算方法的,下一節,我們將開始計算機的運算方法后半部分的內容,即浮點數的計算過程,內容並不多,所以會放到一篇文章中。
如果你喜歡我的文章,歡迎關注我的微信公眾號:最高權限比特流

參考:《計算機組成原理》唐朔飛


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM