Transcript chap2

第二章
電腦的邏輯數學運算
學習目標
•瞭解電腦基本算術運算中的進位轉換
•瞭解浮點運算的概念以及電腦如何執行浮點運算
•瞭解組成電腦的硬體電路—數位邏輯電路的概念
和運作
•瞭解加法器、減法器、乘法器和除法器的設計
•程式編譯與執行設計的最佳化
前
言
•電腦是數位化的設備,雖然我們和電腦溝通可以
使用程式語言,可是實際執行時,電腦是透過層
層的語言轉換,最後變成二進位的0101的機器語
言(或數位資料),才交給它(電腦)的硬體設
備去執行命令。
•其實電腦系統也曾短暫使用過十進位,但是因為
硬體上的開(on)和關(off)動作實際上是高電位和
低電位的關係,因此順理成章的使用1和0來表示
最為方便有效率,也因此一直到今天二進位仍是
電腦系統中最基本的運算方式,然隨著量子電腦
的發展,也許未來是以八進位為主呢(量子有3種
型態,23等於8)。
數值表示: i.f*b
•
•
•
•
二進位:0、1
四進位:0、1、2、3
八進位:0、1、2、3、4、5、6、7
十進位:0、1、2、3、4、5、6、7、8、
9
• 十六進位:0、1、2、3、4、5、6、7、
8、9、A、B、C、D、E、F
• 例題1:數值43510
說明:該數值為十進位(基底為10),另可將43510表示成
4.35*102
• 例題2:數值10112
說明:該數值為二進位(基底為2)
換算成十進位為1*23+0*22+1*21+1*20
=1*8+0*4+1*2+1
=1110
=1.1*101
•例題3:數值3148
說明:該數值為八進位(基底為8)
換算成十進位為3*82+1*81+4*80
=3*64+1*8+4*1
=192+8+4
=20410
=2.04*102
32位元暫存器
31
MSB
0
•電腦中儲存資料的暫存器或記憶體都是
以32位元或64位元位址為基礎的設計
•最左邊的位元(第31st位元)稱為最高(或
最重要的)位元(MSB,most significant
bit),最右邊的位元(第0位元)稱為最低
(或最不重要的)位元(LSB,least
significant bit)
•二進位的系統中,資料的移位(shift)具有乘冪的
關係,若是向左位移m個位置相當於乘上2m;向右
位移k個位置則相當於乘上2-k(等於是除以2k)。
•例題4:ir*2r+ir-1*2r-1+…+i1*21+i0*20+f1*21+f *2-2+…+f *2-n分別向左和向右移一個位置。
2
n
解答:向左移1個位置(相當於乘2),
ir*2r+1+ir-1*2r+…+i1*22+i0*21+f1*20+f2*21+…+f *2-n+1
n
向右移1個位置(相當於除2),
ir*2r-1+ir-1*2r-2+…+i1*20+i0*2-1+f1*2-2+f2
*2-3+…+fn*2-n-1
浮點數運算
•小數:數值介於0和1之間(小於1)的符點數值。
•指數:以某一數值為基底(b),數與數之間具有基
底次方乘冪關係,其中所付予的次方即是指數(如
bk:b為基底,k為指數)。
•MIPS應用程式系統中,浮點數的數學關係式為:
(-1)s*F*2E
•s稱為符號位元,它僅佔1個位元(非0即1),它
代表著這個浮點數的值是屬於正值或負值(s為0
表示正值《任何數的零次方均為1》,s為1表示負
值《-1的1次方值等於-1》);F代表小數,佔23
個位元;E代表指數,佔8個位元
欄
位
31
0
E(指數23~30共8
個位元)
s表正負值符號,
1個位元
F(小數0~22共23個位元)
• 數值溢位(overflow):數值超越欄位可以表示
的範圍 。
• 數值短少(underflow):當負的指數值超過指
數欄位時,會造成無法有效表示該數值的時後,
便會發生數值短少的現象。
• 雙倍精確度(double precision):使用2個32
位元字組來表示一個浮點數值的方法(C程式語
言宣告格式)。
• 單一精確度(single precision):使用1個32
位元字組來表示一個浮點數值的方法。
•任何浮點數值均可以表示成:
ir*br+ir-1*br-1+…+i2*b2+i1*b1+i0*b0+f1
*b-1+f2*b-2+…+fn*b-n
•其中,i0~ir表示整數部分數值、f0~fn表示小數部
分、b表示進位基底、r表示整數值部分的指數、n
表示小數值部分的指數。
•例題1:八進位數值435.78轉換為二進位
435.78100 011 101.1112
•例題2:八進位數值435.78轉換為十進位
435.7104*82+3*81+5*80+7*8-1
=4*64+3*8+5*1+7*0.125
=256+24+5+0.875
=285.87510
=2.85875*102
•例題3:將二個二進位數值的浮點數1.0012和
0.1112相加,其和為102
1.001
+0.111
10.000
驗證
1.0012=1+0.125=1.12510
0.1112=0.5+0.25+0.125=0.87510
1.125+0.875=210=102
MIPS組合語言浮點運算指令
浮點數運算
加法
減法
乘法
除法
條件跳躍
數值精確度
指令
單倍精確度
add.s
雙倍精確度
add.d
單倍精確度
Sub.s
雙倍精確度
Sub.d
單倍精確度
Mul.s
雙倍精確度
Mul.d
單倍精確度
div.s
雙倍精確度
div.d
成立狀況下跳躍
Bclt
不成立狀況下跳躍
bclf
數位邏輯電路
•數位邏輯是電腦執行布林運算(Boolean
operation)的重要單元,也是電腦內部的重要組
成,而邏輯電路中最基本的單元便是及(AND)電
路、或(OR)電路、反(NOT)電路和互斥(EXOR)
電路,電腦裡面的運算單元(加、減、乘、除)
都可以由及電路、或電路、反電路和互斥電路組
成。
算術邏輯單元(ALU)
• 提供加、減、乘、除算
術和及(and)、或(or)和
互斥(exor)等邏輯運算
的電路
B A Cin
1位元算術邏輯單元
真值表
輸入
輸出
F1
F0
F
0
0
A AND B
0
1
A OR B
1
0
A+B
1
1
A-B
A
S
全加
B 法器
Ci
Co
A
S
全加
B 法器
Ci
Co
F F
I0 1 0
多
I1
工
I2 器 F
I3
1位元算術邏輯單元(簡化版)
B
F0
A Cin
A
S
全加
B 法器
Ci
Co
F1 F0
I0
多
I1
工
I2 器 F
I3
Cout
加法器的設計與運作
Cin
Sum
Sum
A
B
A
Cout
Cou
t
全加法器真值表
半加法器真值表
輸入
B
輸出
A
B
Cin
進位Cout
和Sum
0
0
0
0
0
0
0
1
0
1
0
1
0
0
1
A
B
進位Cout
和Sum
0
0
0
1
0
1
1
1
0
0
1
0
1
1
0
0
0
1
1
0
1
1
0
1
0
0
1
1
1
0
1
0
1
1
1
0
1
1
1
1
1
•加法器的邏輯電路有”半加法器”和”全加法
器”;不論多少位元的加法器都可以使用1位元的
加法器組成,如設計1個16位元的加法器,其中低
位元的進位(Cout)會當做是下一級的輸入(Cin,
C1~C16)
A
B
C1
全加
法器
1
S
A
B
Co
C2
全加
法器
2
S
A
B
Co
C15
全加
法器
16
S
Co
減法器的設計與運作
•減法器和加法器最大的不同是加法器有”進位”
的關係,而減法器則有”借位”的關係。所以加
法計算是從最右邊最後一個位元,由右至左進行
數值的累加並向左進位,減法計算則相反,是由
最左位元開始減至最右邊最後一個位元。
A
B
C1
減
法
器
16
S
A
B
Co
C2
減
法
器
15
S
A
B
Co
Cout為借位輸出
C15
減
法
器
1
S
Co
•另一種減法的計算為採用補數(在整數的運算中,
以十進位為例,正整數”N”和負整數”-N”互為
補數),由於電腦的運算係以0和1為主,故補數的
計算稍有不同。
•其中,1的補數系統最為普遍,意即0和1互為補數
(0+1=1,1+0=1),也就是互斥(exor)的邏輯運算。
補數(compliment)
•
•
•
僅考慮無號正整數:以N為基底的進位系統,
假設有一個iN值(iN<N),則iN的補數等於N-iN。
有號數值:N的補數,假設有一個i值,則i的
補數等於N-i。
四進位系統中,1和3互為補數,0和4互為補數。
八進位系統中,1和7互為補數,2和6互為補數,
3和5互為補數,0和8互為補數
•電腦中常用的計算還有2的補數系統,其計算原則
為若數值以0為開頭表示正值、以1為開頭表示負
值(如前所述,第31st位元用來表示正、負值)。
如數值0111111111111111111111111111111112(等
於2,147,483,64710),其補數為
100000000000000000000000000000002 (等於2,147,483,64810),二個數值加起來的和為110(即111111111111111111111111111111112)
•例題2:計算
111111111111111111111111111110012的十進位數
值
解題:
111111111111111111111111111110012
=1*(-231)+1*230+…+1*23+0*22+0*21+1*
20=-231+230+…+23+0+0+1
=-214748364810+214748364110
=-710
答案為-7
•例題3:計算數值
111111111111111111111111111110012和112相加
解題:
111111111111111111111111111110012
+
11
111111111111111111111111111111002
驗證
111111111111111111111111111110012=-710
112=310
-7+3=-410
=111111111111111111111111111111002
•MIPS組合語言中區分為加法(add)、立即加法
(addi)和減法(sub),發生溢位時送出例外信號;
至無號(沒有標示正負值的方法)的加法(addu)、
減法(subu)或立即加法(addiu)在此狀況下則不送
出例外的信號;至於我們所熟知的C++程式語言則
選擇採取忽略溢位的作法。
乘法器的設計與運作
• 乘法的運算中,前(上)面的運算元是”被乘數”,
後(下)面的運算元是”乘數”,相乘後所得到的
結果是”乘積”(或簡稱為”積”)。
• 乘法的計算公式如下:乘積=被乘數*乘數
• 二進位的乘法其實就是向左移位的結果,而一個
N位元二進位的被乘數和M位元二進位的乘數,相
乘後所得到的積是(N+M)個位元的二進位數值
•例題1:二進位數值110112和2相乘,其積為
1101102
11011  被乘數
X
10  乘數
0
+11011
110110 乘積
•驗證:110112=16+8+2+1=2710
27*2=5410=32+16+4+2=1101102
乘法器
•MIPS乘法的計算: MIPS組合語言系統特別提供2
個獨立的32位元暫存器(以Hi和Lo區分較高的32個
位元和較低的32個位元),合併有64位元的寬度,
作為儲存乘積值的乘積暫存器。
•MIPS乘法的指令有無號乘法(multu)和乘法(mult,
即有號乘法)的計算。
快速乘法器的硬體架構圖
加法器
加法器
加法器
乘
積
第
1
位
元
加法器
乘
積
第
63
位
元
乘
積
第
31
位
元
乘
積
第
0
位
元
• 第一個被設計完成的乘法器是64位元的乘法器,其中除乘
數暫存器為32位元,其餘的被乘數暫存器、算術邏輯單元
和乘積暫存器則都是64位元;控制單元用來決定被乘數暫
存器和乘數暫存器的移位和將乘積的結果寫入乘積暫存器
中。
向左移位
被乘數暫存器
左移
向右移位
算術邏輯
單元
乘積暫存器
寫入
乘數暫存器
右移
控制
單元
被乘數暫
存器
算術邏輯
單元
向右移位
乘積
暫存器
右移
寫入
控制
單元
•最佳化的乘法器版
本(如左圖),其中
乘數暫存器為64位
元,其餘的被乘數
暫存器、算術邏輯
單元和乘積暫存器
則都是32位元,大
幅縮減了暫存器的
寬度。
• 在乘法器中,因應有號乘法的需要,最高的第31st位元都
須提供作為符號位元使用,而其實在乘法的計算中,我們
可以將表示正、負值的符號位元直接拉出做”互斥(exor)”
的邏輯運算,其他的數值仍按原來的方式計算,如此一來
可多空出1個位元提供進位使用,而符號位元直接經硬體
互斥邏輯的運算,其速度較快,或許也是一項優點呢!
• 說明:正值的符號位元值為0,負值的符號位元值為1,當
被乘數和乘數同為正值或同為負值時,乘積的值必定是正
值,意即乘積的符號位元必定為0《0⊕0=0(同為正值),
1⊕1=0(同為負值)》;反之,當被乘數和乘數分別為一正
值和一負值時,乘積的值必定是負值,意即乘積的符號位
元必定為1《1⊕0=1(一負一正),0⊕1=1(一正一負)》。
除法器的設計與運作
• 除法其實就是乘法的倒數運算,因為除法的變化
較多,而且當除以”0”時會造成無法解決的狀
況,所以相對下除法比乘法較少使用。除法的計
算中,二個運算元分別是”被除數”和”除數”,
而相除後所得到的結果是”商數”(或簡稱為”
商”),而無法整除所餘留的數值是”餘數”。
• 除法的計算公式如下:被除數=商*除數+餘數
• 二進位的除法其實就是向右移位的結果
除法計算
•例題1:101102除2,其商為10112
驗證:101102=16+4+2=2210
22/2=1110=8+2+1=10112
由上可證明二進位的除法確實是位元向右移位的
關係。
•例題2:十進位數值435除以10,得到的商是43,
餘數是5
43510= 43*10 + 5
43 商
除數 10 | 435 被除數
40
35
30
5  餘數
•第一個版本的64
位元除法器,其
中除商數暫存器
為32位元,其餘
的除數暫存器、
算術邏輯單元和
餘數暫存器則都
是64位元;控制
單元用來決定除
數暫存器和商數
暫存器的移位並
將結果寫入餘數
暫存器
向右移位
除數暫存器
右移
向左移位
商數暫存器
右移
算術邏
輯單元
餘數暫存器
寫入
控
制
單
元
除數
暫存器
算術邏輯單
元
向右或右移位
餘數
暫存器
右移
左移
寫入
控制
單元
•最佳化的版本
(如左圖),其中
餘數暫存器為64
位元,其餘的除
數暫存器、算術
邏輯單元和商數
暫存器則都是32
位元,大幅縮減
了暫存器的寬度