計算機組成與設計(三)算術運算

一、加法和減法
加法即數據從右到左逐位相加,同時進位也相應地向左傳播
減法可採用加法實現:減數在簡單的取反後再加1形成補碼再進行加法操作
在這裏插入圖片描述
在這裏插入圖片描述
而當運算結果超過限制時,就會發生溢出。
當相加的兩個源操作數符號相異時,不會發生溢出;而當相減的符號相同時,不會發生溢出。(溢出發生時,符號位被數值位佔用而產生錯誤;當兩個正數相加但結果爲負時,則說明發生溢出;或者做減法時,一個正數減去一個負數得到一個負的結果等1,則也說明發生溢出)
在這裏插入圖片描述
由於無符號數通常用於表示內存地址,這種情況下的溢出可以忽略

  • 加法(add)、立即數加法(addi)和減法(sub),這三條指令在溢出時產生異常
  • 無符號加法(addu)、立即數無符號加法(addiu)和無符號減法(subu),這三條指令在發生溢出時不會產生異常

二、乘法與除法
在這裏插入圖片描述
在這裏插入圖片描述
這個算法大概需要100個時鐘週期來完成兩個32位的數相乘(Amdahl定律:如果一個慢速操作在程序中佔據一定比重的話,也會限制程序的性能)

可以改進成每一步只需要一個時鐘週期,可以並行化來加速執行:當乘數位爲1時,將乘數和被乘數進行移位,同時將被乘數和積相加
在這裏插入圖片描述
在這裏插入圖片描述
有符號乘法:最簡單首先將被乘數和乘數轉化爲正數,並記住原來的符號位,這樣可用上述算法迭代31次,符號位不必參加運算,當符號相異時,積爲負;

更快速的乘法:將每個右邊的加法器的輸出作爲左邊加法器的輸入,形成一個高32的加法器棧(將32個加法器組成一個並行樹,只需等待log2(32),即5次32位長加法的時間)
在這裏插入圖片描述
除法:(被除數=商x除數+餘數)
在開始時,32位的商寄存器設爲0,算法每次迭代將除數向右移一位,所以需要在開始時將除數放置在64位除數寄存器的左半邊,然後每右移一位來和被除數對齊,餘數寄存器初始化爲被除數
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
改進的方法:通過將源操作數和商移位與減法同時進行
在這裏插入圖片描述
有符號除法:最簡單的辦法記住除數和被除數的符號,如果兩者符號相異,則商爲負

更快速的除法:由於除法算法每次迭代前需要知道減法結果的符號,而乘法可以立即生成32個部分積;(有些技術可以每步生產不止一個商位,如SRT除法算法,通過查找表的方式來嘗試猜測每步幾個商位,其中查找表基於被除數和餘數的高位部分來進行,依賴後面的步驟來修正錯誤的猜測)

所以MIPS中的乘除法只需要一個64位的可左右移位的寄存器和一個能做加減法的32位寬的ALU(MIPS用32位的Hi和32位的Lo寄存器來處理,Hi存放餘數,Lo存放商)
在這裏插入圖片描述
在這裏插入圖片描述
三、浮點運算
規格化數:一個採用科學計數法表示的數,沒有前導零且小數點左邊只有一位整數(爲了使二進制數規格化,需要定義一個基數,這個基數可用來移位使小數點左邊只保留一位非零數,只有基數爲2才滿足)

  • 簡化浮點數的數據交換
  • 簡化了浮點算術算法
  • 提高了用一個字存儲的數的精度

浮點設計者必須在尾數和指數位寬之間找到折中的方法(增加小數部分可以增加表示精度,增加指數部分會增加數的表示範圍)
在這裏插入圖片描述
在這裏插入圖片描述
浮點數表示範圍(2.0 x10-38 到2.0 x 1038 )

上溢:表示指數太大而不能在指數域表示
下溢:負的指數太大(即數太小)而導致指數域放不下的情況
一種減少上溢和下溢的方法是採用更大指數的格式,double->雙精度浮點算法
在這裏插入圖片描述
在這裏插入圖片描述
IEEE754給出一種表示無效操作結果(如0/0或者無窮-無窮)的符號(NaN,Not a number),設立NaN的目的是讓程序員推遲程序中的一些測試和決定,等到方便的時候進行。

帶偏階的記數法:(希望將最小的負指數表示爲00000000,而最大的正指數表示爲11111111,需要從帶偏階的指數中減去偏階,才能夠獲得真實的值)
IEEE754規定單精度偏階爲127,所以指數爲-1,則會表示爲-1+127,即126=0111 1110,而+1表示爲1+127,即128=1000 0000;雙精度的偏階爲1023
在這裏插入圖片描述
浮點加法
1、爲了能讓兩數相加,必須將有較小指數的數向有較大指數的數對齊
2、將有效數相加
3、由於和不是規格化的科學記數法,需要調整
在這裏插入圖片描述
在這裏插入圖片描述
浮點乘法:
1、只要簡單地將源操作數的指數相加來作爲積的指數
2、計算有效數的乘法
3、將得到的積規格化
4、根據有效數進行舍入操作
5、積的符號取決於原始源操作數的符號
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
算術的精確性:
由於實數有無窮多個,而雙精度最多可以精確表示256 個,IEEE754提供了幾個舍入模式供程序員選擇
保護位:在浮點數中間計算中,在右邊多保留的兩位中的首位;用於提高舍入精度
舍入位:在浮點數中間計算中,在右邊多保留的兩位中的第二位,使浮點中間結果滿足浮點格式,得到最接近的數
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
IEEE754有四種舍入模式:
1、總是向上舍入(向正無窮)
2、總是向下舍入(向負無窮)
3、截斷舍入
4、想最靠近的偶數舍入(如果最後一位是奇數,就加1;如果是偶數,就減1)

粘貼位:當舍入位右邊有非0的數據時將其置1
在這裏插入圖片描述
在這裏插入圖片描述

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