計算機組成原理與系統結構(三)

運算方法和運算器
1 補碼加減運算和運算器
基本的規則就是:
加法:
整數: [A]補 + [B]補 = [A+B]補 (mod 2^(n+1))
小數: [A]補 + [B]補 = [A+B]補 (mod 2)

減法:
整數: [A-B]補 = [A]補 + [-B]補 (mod 2^(n+1))
小數: [A-B]補 = [A]補 + [-B]補(mod 2)
[-B]補的求法就是 [B]補的連同符號位在內,每位求反加一

ps:這裏假定了A,B都是正數

如果你直接寫出了負數的補碼,那麼直接計算就好了。由[-B]補求解[B]補,或者由[B]補求[-B]補,都是連同符號位每位求反加一,本身就表達着,只要是補碼,直接計算即可。
下面的例子可以很好說明:
設機器數字長爲8位,一位用作符號位。若A = +15, B = +24,求[A-B]補,並且還原成真值。
ps:這裏的還原你真的是把求出的補碼算出真值不是用15 - 24 = -9口算的嗎。。
解:首先是換成二進制原碼:A = +15 = 0,0001111; B = +24 = 0,0011000
換成補碼:[A]補 = 0,0001111, [B]補 = 0,0011000,[-B]補 = 1,1101000
以上是標準的算前準備
[A-B]補 = [A]補 + [-B]補
0,0001111
+1,1101000
= 1,1110111
也可以麼想:直接求A-B補碼相減:
0,0001111
- 1,1101000
= 1,1110111
從第九位(未知)借來一個2,求得結果也是我們需要的補碼。
真值爲-9。
2 溢出判斷:
2.1 只有一位符號位的,實際參加操作的兩個數,這個是指,如果是A-B,看到是[A]補和[-B]補的符號位
如果這兩個符號位相同,但是求出來的結果(補碼結果)符號位不同,那麼就是溢出了。

2.2 有兩位符號位:當兩位符號位不同時表示溢出,否則無溢出。
無論是否有溢出,最高位的符號位表示真正的符號。
3 移碼加減運算與判溢
1,最高位爲符號位,1表示正號,0表示負號;
2,在計算機中,移碼只執行加減法運算,且需要對得到的結果加以修正,修正量爲2的n次冪,即要對結果的符號位取反,得到[X]移。
舉個例子吧:
X=+1011,則X的補碼是01011,而移碼是11011;
Y=-1011,則Y的補碼是10101,而移碼是00101;
使用移碼求和,只需直接將移碼相加然後符號位取反; 使用移碼求差,直接將被減數移碼與減數相反數的移碼相加,結果的符號位取反。
4 原碼一位乘法、補碼一位乘法(校正法)
https://www.cnblogs.com/yjbjingcha/p/6956431.html

5 原碼恢復餘數算法、原碼不恢復餘數法-加減交替法:
http://www.360doc.com/content/15/0629/14/8179889_481461302.shtml
6 補碼不恢復除法:
https://wenku.baidu.com/view/ffe971f3770bf78a652954d0.html
7 浮點數的表示和運算
https://www.cnblogs.com/landscapemi/articles/3304661.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章