運算器是進行機器運算的工具。運算器也是計算機進行算術運算和邏輯運算的主要部件,運算器的邏輯結構取決於機器的指令系統、數據表示方法和運算方法等。
基本介紹
- 中文名:機器運算
- 外文名:machine arithmetic;
- 工具:運算器
- 作用:算術運算和邏輯運算
- 分類:原碼和補碼
- 領域:計算機
基本信息,實現,定點加減運算,定點乘法運算,原碼一位乘法,補碼一位乘法,補碼兩位乘法,定點除法運算,原碼除法運算,補碼除法運算,邏輯運算實現,基本組成,運算器結構,ALU電路,
基本信息
機器運算通過運算器來實現,運算器也是計算機進行算術運算和邏輯運算的主要部件,運算器的邏輯結構取決於機器的指令系統、數據表示方法和運算方法等。這裡主要介紹數值數據在計算機中實現算術運算和邏輯運算的方法,以及運算部件的基本結構和工作原理。
實現
加法器
1.全加器
基本的加法單元稱為全加器,它要求三個輸入量:運算元Ai和Bi、低位傳來的進位Ci-1,並產生兩個輸出量:本位和Si、向高位的進位Ci。全加器的邏輯表達式為:
Si=Ai⊕Bi⊕Ci-1
Ci=AiBi+(Ai⊕Bi)Ci-1
Si=Ai⊕Bi⊕Ci-1
Ci=AiBi+(Ai⊕Bi)Ci-1
2.串列加法器與並行加法器
並行加法器由多個全加器組成,其位數的多少取決於機器的字長,數據的各位同時運算。並行加法器雖然運算元的各位是同時提供的,但低位運算所產生的進位有可能會影響高位的運算結果。例如:11…11和00…01相加,最低位產生的進位將逐位影響至最高位。因此,並行加法器的最長運算時間主要是由進位信號的傳遞時間決定的。提高並行加法器速度的關鍵是儘量加快進位產生和傳遞的速度。
進位的產生和傳遞
進位表達式:Ci=AiBi+(Ai⊕Bi)Ci-1
Gi的含義是:若本位的兩個輸入均為1,必然要向高位產生進位。
Pi的含義是:當兩個輸入中有一個為1,低位傳來的進位Ci-1將超越本位向更高的位傳送。
可得:Ci=Gi+PiCi-1
Pi的含義是:當兩個輸入中有一個為1,低位傳來的進位Ci-1將超越本位向更高的位傳送。
可得:Ci=Gi+PiCi-1
把n個全加器串接起來,就可進行兩個n位數的相加。串列進位又稱行波進位,每一級進位直接依賴於前一級的進位,即進位信號是逐級形成的。 串列進位鏈的總延遲時間與字長成正比。假定,將一級門的延遲時間定為ty,從上述公式中可看出,每形成一級進位的延遲時間為2ty。在字長為n位的情況下,若不考慮Gi、Pi的形成時間,從C0→Cn的最長延遲時間為2nty。
定點加減運算
原碼加減運算
對原碼表示的兩個數進行加減運算時,符號位不參與運算,僅僅是兩數的絕對值參與運算。計算機的實際操作是加還是減,不僅取決於指令的操作碼,還取決於兩個運算元的符號,例如:加法時可能要做減法(兩數異號);減法時又可能做加法(兩數異號),所以原碼加減運算的實現是比較複雜的。
補碼加減運算
1.補碼加法
兩個補碼表示的數相加,符號位參加運算,且兩數和的補碼等於兩數補碼之和,即
[X+Y]補=[X]補+[Y]補
2.補碼減法
根據補碼加法公式可推出:
[X-Y]補=[X+(-Y)]補=[X]補+[-Y]補
已知[Y]補求[-Y]補的方法是:將[Y]補連同符號位一起求反,末尾加“1”。 [-Y]補被稱為[Y]補的機器負數,由[Y]補求[-Y]補的過程稱為對[Y]補變補(求補),表示為:
[-Y]補=[[Y]補]變補
兩個補碼表示的數相加,符號位參加運算,且兩數和的補碼等於兩數補碼之和,即
[X+Y]補=[X]補+[Y]補
2.補碼減法
根據補碼加法公式可推出:
[X-Y]補=[X+(-Y)]補=[X]補+[-Y]補
已知[Y]補求[-Y]補的方法是:將[Y]補連同符號位一起求反,末尾加“1”。 [-Y]補被稱為[Y]補的機器負數,由[Y]補求[-Y]補的過程稱為對[Y]補變補(求補),表示為:
[-Y]補=[[Y]補]變補
注意將“某數的補碼錶示”與“變補”這兩個概念區分開來。一個負數由原碼錶示轉換成補碼錶示時,符號位是不變的,僅對數值位的各位變反,末尾加“1”。而變補則不論這個數的真值是正是負,一律連同符號位一起變反,末尾加“1”。[Y]補表示的真值如果是正數,則變補後[-Y]補所表示真值變為負數,反之亦然。
3.補碼加減運算規則
補碼加減運算規則如下:
(1)參加運算的兩個運算元均用補碼錶示;
(2)符號位作為數的一部分參加運算;
(3)若做加法,則兩數直接相加;若做減法,則將被減數與減數的機器負數相加;
(4)運算結果用補碼錶示。
補碼加減運算規則如下:
(1)參加運算的兩個運算元均用補碼錶示;
(2)符號位作為數的一部分參加運算;
(3)若做加法,則兩數直接相加;若做減法,則將被減數與減數的機器負數相加;
(4)運算結果用補碼錶示。
4.符號擴展
在計算機算術運算中,有時必須將採用給定位數表示的數轉換成具有更多位數的某種表示形式。例如某個程式需要將一個8位數與另外一個32位數相加。要想得到正確的結果,在將8位數與32位數相加之前,必須將8位數轉換成32位數形式,這被稱為“符號擴展”。
對於補碼,符號擴展方法是:原有符號位保持不變,若為正數則所有附加位都用0進行填充,若為負數則所有附加位都用1進行填充。也可以理解為是用符號位來填充附加的高位。
在計算機算術運算中,有時必須將採用給定位數表示的數轉換成具有更多位數的某種表示形式。例如某個程式需要將一個8位數與另外一個32位數相加。要想得到正確的結果,在將8位數與32位數相加之前,必須將8位數轉換成32位數形式,這被稱為“符號擴展”。
對於補碼,符號擴展方法是:原有符號位保持不變,若為正數則所有附加位都用0進行填充,若為負數則所有附加位都用1進行填充。也可以理解為是用符號位來填充附加的高位。
補碼的溢出判斷與檢測方法
1.溢出的產生
在補碼加減運算中,有時會遇到這樣的情況:兩個正數相加,而結果的符號位卻為1(結果為負);兩個負數相加,而結果的符號位卻為0(結果為正)。
在補碼加減運算中,有時會遇到這樣的情況:兩個正數相加,而結果的符號位卻為1(結果為負);兩個負數相加,而結果的符號位卻為0(結果為正)。
設參加運算的兩數為X、Y,做加法運算。
若X、Y異號,不會溢出。
若X、Y同號,運算結果為正且大於所能表示的最大正數或運算結果為負且小於所能表示的最小負數(絕對值最大的負數)時,產生溢出。將兩正數相加產生的溢出稱為正溢;反之,兩負數相加產生的溢出稱為負溢。
若X、Y異號,不會溢出。
若X、Y同號,運算結果為正且大於所能表示的最大正數或運算結果為負且小於所能表示的最小負數(絕對值最大的負數)時,產生溢出。將兩正數相加產生的溢出稱為正溢;反之,兩負數相加產生的溢出稱為負溢。
2.溢出檢測方法
設:被運算元為:[X]補=Xs,X1X2…Xn
運算元為:[Y]補=Ys,Y1Y2…Yn
其和(差)為:[S]補=Ss,S1S2…Sn
(1)採用一個符號位
兩正數相加,結果為負表明產生正溢;兩負數相加,結果為正表明產生負溢。因此可得出採用一個符號位檢測溢出的方法:
當Xs=Ys=0,Ss=1時,產生正溢。
當Xs=Ys=1,Ss=0時,產生負溢。
設:被運算元為:[X]補=Xs,X1X2…Xn
運算元為:[Y]補=Ys,Y1Y2…Yn
其和(差)為:[S]補=Ss,S1S2…Sn
(1)採用一個符號位
兩正數相加,結果為負表明產生正溢;兩負數相加,結果為正表明產生負溢。因此可得出採用一個符號位檢測溢出的方法:
當Xs=Ys=0,Ss=1時,產生正溢。
當Xs=Ys=1,Ss=0時,產生負溢。
(2)採用進位位
兩數運算時,產生的進位為Cs,C1C2…Cn,其中:Cs為符號位產生的進位,C1為最高數值位產生的進位。
兩正數相加,當最高有效位產生進位(C1=1)而符號位不產生進位(Cs=0)時,發生正溢。
兩負數相加,當最高有效位沒有進位(C1=0)而符號位產生進位(Cs=1)時,發生負溢。
兩數運算時,產生的進位為Cs,C1C2…Cn,其中:Cs為符號位產生的進位,C1為最高數值位產生的進位。
兩正數相加,當最高有效位產生進位(C1=1)而符號位不產生進位(Cs=0)時,發生正溢。
兩負數相加,當最高有效位沒有進位(C1=0)而符號位產生進位(Cs=1)時,發生負溢。
(3)採用變形補碼(雙符號位補碼)
在雙符號位的情況下,把左邊的符號位Ss1叫做真符,因為它代表了該數真正的符號,兩個符號位都作為數的一部分參加運算。這種編碼又稱為變形補碼。
雙符號位的含義如下:
Ss1Ss2=00 結果為正數,無溢出;
Ss1Ss2=01 結果正溢;
Ss1Ss2=10 結果負溢;
Ss1Ss2=11 結果為負數,無溢出。
在雙符號位的情況下,把左邊的符號位Ss1叫做真符,因為它代表了該數真正的符號,兩個符號位都作為數的一部分參加運算。這種編碼又稱為變形補碼。
雙符號位的含義如下:
Ss1Ss2=00 結果為正數,無溢出;
Ss1Ss2=01 結果正溢;
Ss1Ss2=10 結果負溢;
Ss1Ss2=11 結果為負數,無溢出。
當兩位符號位的值不一致時,表明產生溢出。溢出=Ss1⊕Ss2。
定點乘法運算
原碼一位乘法
原碼一位乘法的規則為:
(1)參加運算的運算元取其絕對值;
(2)令乘數的最低位為判斷位,若為“1”,加被乘數,若為“0”,不加被乘數(加0);
(3)累加後的部分積右移一位;
(4)重複n次(2)和(3);
(5)符號位單獨處理,同號為正,異號為負。
(1)參加運算的運算元取其絕對值;
(2)令乘數的最低位為判斷位,若為“1”,加被乘數,若為“0”,不加被乘數(加0);
(3)累加後的部分積右移一位;
(4)重複n次(2)和(3);
(5)符號位單獨處理,同號為正,異號為負。
補碼一位乘法
比較法-Booth乘法
設:被乘數[X]補=Xs.X1X2…Xn,乘數[Y]補=Ys.Y1Y2…Yn。
在乘數的最低位之後增加一位附加位Yn+1,它的初值為0,增加附加位不會影響運算結果。
每次運算取決於乘數相鄰兩位Yi、Yi+1的值,把它們稱為乘法的判斷位。根據校正法的統一表達式推出:由乘數相鄰兩位的比較結果(Yi+1-Yi)來確定運算操作。
設:被乘數[X]補=Xs.X1X2…Xn,乘數[Y]補=Ys.Y1Y2…Yn。
在乘數的最低位之後增加一位附加位Yn+1,它的初值為0,增加附加位不會影響運算結果。
每次運算取決於乘數相鄰兩位Yi、Yi+1的值,把它們稱為乘法的判斷位。根據校正法的統一表達式推出:由乘數相鄰兩位的比較結果(Yi+1-Yi)來確定運算操作。
Booth乘法規則如下:
(1)參加運算的數用補碼錶示;
(2)符號位參加運算;
(3)乘數最低位後面增加一位附加位Yn+1,其初值為0;
(4)由於每求一次部分積要右移一位,所以乘數的最低兩位Yn、Yn+1的值決定了每次應執行的操作;
(1)參加運算的數用補碼錶示;
(2)符號位參加運算;
(3)乘數最低位後面增加一位附加位Yn+1,其初值為0;
(4)由於每求一次部分積要右移一位,所以乘數的最低兩位Yn、Yn+1的值決定了每次應執行的操作;
(5)移位按補碼右移規則進行;
(6)共需做n+1次累加,n次移位,第n+1次不移位。
(6)共需做n+1次累加,n次移位,第n+1次不移位。
補碼兩位乘法
為了提高乘法的執行速度,可以選用兩位乘法的方案。所謂兩位乘法,就是每次處理乘數中的兩位,從而使乘法的速度提高了一倍。兩位乘法又可分為原碼兩位乘法和補碼兩位乘法,在此只討論補碼兩位乘法。
根據前面介紹的Booth乘法方便地推導出補碼兩位乘法,即把補碼兩位乘理解為將Booth乘法的兩次合併為一次來做。
根據前面介紹的Booth乘法方便地推導出補碼兩位乘法,即把補碼兩位乘理解為將Booth乘法的兩次合併為一次來做。
補碼兩位乘法規則如下:
(1)參加運算的數用補碼錶示;
(2)符號位參加運算;
(3)乘數最低位後增加一位附加位Yn+1,初值為0;
(4)根據乘數的最低三位Yn-1YnYn+1的值決定每次應執行的操作;
(5)移位按補碼右移規則進行。
(1)參加運算的數用補碼錶示;
(2)符號位參加運算;
(3)乘數最低位後增加一位附加位Yn+1,初值為0;
(4)根據乘數的最低三位Yn-1YnYn+1的值決定每次應執行的操作;
(5)移位按補碼右移規則進行。
定點除法運算
原碼除法運算
(2)恢復餘數法
恢復餘數法是直接作減法試探方法,不管被除數(或餘數)減除數是否夠減,都一律先做減法。若餘數為正,表示夠減,該位商上“1”;若餘數為負,表示不夠減,該位商上“0”,並要恢復原來的被除數(或餘數)。
恢復餘數法是直接作減法試探方法,不管被除數(或餘數)減除數是否夠減,都一律先做減法。若餘數為正,表示夠減,該位商上“1”;若餘數為負,表示不夠減,該位商上“0”,並要恢復原來的被除數(或餘數)。
由於餘數的正、負是根據不同的運算元組合隨機出現的,這就使得除法運算的實際操作次數不固定,從而導致控制電路比較複雜。而且在恢復餘數時,要多作一次加法,降低了執行速度。因此,原碼恢復餘數法在計算機中一般很少採用。
2.原碼不恢復餘數法(原碼加減交替法)
原碼不恢復餘數法是對恢復餘數法的一種改進。在恢復餘數法中,若第i-1次求商的餘數為ri-1,則第i次求商操作為:ri=2ri-1-Y
若夠減,ri=2ri-1-Y>0,商1。若不夠減,ri=2ri-1-Y<0,商0,恢復餘數後,ri’=ri+Y=2ri-1,然後再左移一位,進行第i+1次操作:ri+1=2ri’-Y=2(ri+Y)-Y=2ri+2Y-Y=2ri+Y
原碼不恢復餘數法是對恢復餘數法的一種改進。在恢復餘數法中,若第i-1次求商的餘數為ri-1,則第i次求商操作為:ri=2ri-1-Y
若夠減,ri=2ri-1-Y>0,商1。若不夠減,ri=2ri-1-Y<0,商0,恢復餘數後,ri’=ri+Y=2ri-1,然後再左移一位,進行第i+1次操作:ri+1=2ri’-Y=2(ri+Y)-Y=2ri+2Y-Y=2ri+Y
補碼除法運算
被除數和除數都用補碼錶示,符號位參加運算。
1.夠減的判斷
參加運算的兩個數符號任意,夠減的情況如下:
(1)同號X>0,Y>0,X-Y>0
1.夠減的判斷
參加運算的兩個數符號任意,夠減的情況如下:
(1)同號X>0,Y>0,X-Y>0
X<0,Y0X-Y<0
(2)異號X>0,Y0
X0,(-X)-Y>0X+Y<0
2.上商規則
如果[X]補和[Y]補同號,則商為正數,上商規則與原碼除法相同,即夠減時上商“1”,不夠減時上商“0”;如果[X]補和[Y]補異號,則商為負數,上商規則與同號時相反,即夠減時上商“0”,不夠減時上商“1”。
將上商規則與夠減的判斷結合起來,可得到本次餘數[ri]補和除數[Y]補同號,商上“1”,反之,商上“0”。
如果[X]補和[Y]補同號,則商為正數,上商規則與原碼除法相同,即夠減時上商“1”,不夠減時上商“0”;如果[X]補和[Y]補異號,則商為負數,上商規則與同號時相反,即夠減時上商“0”,不夠減時上商“1”。
將上商規則與夠減的判斷結合起來,可得到本次餘數[ri]補和除數[Y]補同號,商上“1”,反之,商上“0”。
3.商符的確定
商符是在求商的過程中自動形成的,按補碼上商規則,第一次得出的商,就是實際應得的商符。
4.求新部分餘數
求新餘數[ri+1]補的通式如下:
[ri+1]補=2[ri]補+(1-2Qi)×[Y]補
Qi表示第i步的商。若商上“1”,下一次操作為餘數左移一位,減去除數;若商上“0”,下一次操作為餘數左移一位,加上除數。
商符是在求商的過程中自動形成的,按補碼上商規則,第一次得出的商,就是實際應得的商符。
4.求新部分餘數
求新餘數[ri+1]補的通式如下:
[ri+1]補=2[ri]補+(1-2Qi)×[Y]補
Qi表示第i步的商。若商上“1”,下一次操作為餘數左移一位,減去除數;若商上“0”,下一次操作為餘數左移一位,加上除數。
邏輯運算實現
邏輯運算比算術運算要簡單得多,這是因為邏輯運算是按位進行的,位與位之間沒有進位/借位的關係。
1.邏輯非
邏輯非又稱求反操作,它對某個暫存器或主存單元中各位代碼按位取反。
2.邏輯乘
邏輯乘就是將兩個暫存器或主存單元中的每一相應位的代碼進行“與”操作。
1.邏輯非
邏輯非又稱求反操作,它對某個暫存器或主存單元中各位代碼按位取反。
2.邏輯乘
邏輯乘就是將兩個暫存器或主存單元中的每一相應位的代碼進行“與”操作。
基本組成
運算器結構
基本的運算器包含以下幾個部分:實現基本算術、邏輯運算功能的ALU,提供運算元與暫存結果的暫存器組,有關的判別邏輯和控制電路等。