Download as pdf or txt
Download as pdf or txt
You are on page 1of 74

國立雲林科技大學

電機工程系

微算機概論(上)

老師:王偉修
系級:
姓名:
學號:
目錄
第一章 數位邏輯................................................. 1
1. 組合邏輯..................................................... 1
1.1 簡介.................................................... 1
1.2 二進位元邏輯的定義...................................... 1
1.3 二進位加法器............................................ 3
1.4 解碼器(Decorder)........................................ 6
1.5 編碼器(Encorder)........................................ 7
1.6 多工器(Multiplexer)..................................... 8
1.7 算數邏輯單元(Arithmetic Logic Unit,ALU)................. 9
2. 循序邏輯.................................................... 10
2.1 簡介................................................... 10
2.2 儲存元件............................................... 10
2.3 記憶體................................................. 17
2.4 CPU 結構 ............................................... 17
3. 習題........................................................ 18
第二章 微算機簡介.............................................. 22
1. 單晶片控制器概論............................................ 22
2. 簡單計算機動作流程.......................................... 23
3. TMS320F2812 數位訊號處理器簡介 .............................. 36
3.1 TMS320F2812 晶片的主要功能: ........................... 37
4. TMS320F28335 數位訊號處理器簡介 ............................. 39
4.1 TMS320F28335 晶片的主要功能: .......................... 40
5. 習題........................................................ 42
第三章 數碼與文數碼............................................ 43
1. 文數字碼.................................................... 43
2. 數碼........................................................ 45
3. 數系轉換.................................................... 47
3.1 二進制數目系統......................................... 47
3.2 十六進制數目系統....................................... 49
4. 二進制算數.................................................. 52
4.1 二進制的四則運算....................................... 52
4.2 數目表示法............................................. 54
4.3 2 補數算數運算 ......................................... 55
5. 定點算數.................................................... 58
5.1 定點表示法............................................. 58
5.2 定點與浮點表示法的比較................................. 59
6. 浮點算數.................................................... 60
6.1 浮點數表示法........................................... 60
6.2 浮點數的四則運算....................................... 66
7. 習題........................................................ 70

II
第一章 數位邏輯

1. 組合邏輯

1.1 簡介
數位系統的邏輯電路可能是組合的(combinational)或循序(sequential)。
組合電路所包含的邏輯閘,其輸出在任何時間都是僅由目前輸入的組合所決定。
一個組合邏輯電路所表現出來的運算可以用一組布林函數來描述。反之,循序邏
輯電路除了邏輯閘之外還有儲存元件,它們的輸出,除了與當時的輸入有關外,
還受儲存元件的狀態所影響。因為儲存元件的狀態,乃是先前所輸入的函數,因
此循序邏輯電路的輸出,不僅由目前輸入值決定,還受過去的輸入影響。

1.2 二進位元邏輯的定義

AND 閘
此運算可用“‧”表示或不寫運算子。例如 : X‧Y=Z 或 XY=Z AND 閘真值表
X 與 Y 兩者必頇同時為1時,Z 才會為 1。

1
OR 閘
此運算可用“+”表示。例如 : X+Y=Z OR 閘真值表
X 或 Y 其中一者為1,或兩者皆為 1 時 Z 才會為 1。

NOT 閘
此運算可用一撇(或一槓)表示。例如 : X'= Z 或 X = Z
意思是 Z 是 X 的反向,如果 X=1 則 Z=0;如果 X=0 則 Z=1。
NOT 運算也可以看成是補數運算,因為它將 0 變成 1,且 1 變成 0。

NOT 閘真值表

2
XOR 閘
互斥或以符號⊕來表示是一種邏輯運算,可以由下列布林運算來表示:

A⊕B=AB'+A'B

假如只有 A 等於 1 或只有 B 等於 1(亦即 A 與 B 的值不同時),則互斥或等於 1。


當 A 及 B 同時等於 1 或同時等於 0 時,則上式等於 0。

1.3 二進位加法器
數位計算機執行資料處理的工作,其中常碰到的功能是各式各樣的算術運算。
最基本的即為二進位位元的相加。加法包含 4 種可能的基本運算:0+0=0,
0+1=1,1+0=1,1+1=10。前三種運算,產生的和為一位數。但當
被加數與加數都等於1時,兩者的和就成為二位數,所得結果中較高的有效位元
稱為進位(Carry)。實現兩個位元相加的組合電路,稱為半加器(Half adder)。
執行三個位元(兩個有效位元和先前進位)相加的電路,即為一個全加法器(Full
adder)。由名稱可知可用兩個半加法器來完成一個全加法器。

3
半加法器
半加法器電路需要兩個二進位輸入和兩個二進位輸出。輸入變數代表被加數與加
數位元;輸出變數為和(Sum)與進位(Carry)。
Sum=a⊕b=a’b+ab’
Carry=a‧b

半加法器真值表

半加法器-邏輯電路

全加法器
全加法器(Full Adder)為一處理三個輸入位元算術和的組合電路,它具有三個輸
入與兩個輸出,其中兩個輸入為加數與被加數,第三個輸入代表從前級較低有效
位置送來的進位。

全加法器-邏輯電路

全加法器-邏輯電路

4
漣波加法器
漣波加法器為多個全加法器(FA)電路相互連接所形成,下圖中為一個四位元加法
器,其中最右側代表最低有效位元。進位透過全加法器以鏈條的方式連接到下一
級的全加法器。

四位元漣波加法器電路

例:設A=1001,B=0101
它們的和S=1110是由下列所之4位元加法器所形成:
i 3 2 1 0
輸入進位 0 0 1 0 Ci
被加數 1 0 0 1 Ai
加數 0 1 0 1 Bi
和 1 1 1 0 Si
輸出進位 0 0 0 1 Ci+1
這些位元利用全加法器相加,由最小有效位元(i=0)開始直到產生和位元及進位

位元,才往下一級(i+1)。輸入進位 C0 在最小有效位元位置一定是 0,當最小有

效位元完成計算後,將進位位元輸出到下一級 FA 進位位元。

5
1.4 解碼器(Decoder)
解碼器是一個用來使二進位資料從 n 條輸入線轉換到最多是2𝑛 條獨特輸出
線的組合電路。下圖為 2 對 4 線解碼器電路。兩個輸入被解碼成四個輸出,其運
作可由真值表得出,每一個可能的輸入組合,有三個輸出等於 0,且只有一個輸
出等於 1
布林函數式 :
D0=A0'‧A1' 二對四線解碼器真值表
D1=A0‧A1'
D2=A0'‧A1
D3=A0‧A1

二對四線解碼器電路

6
1.5 編碼器(Encoder)
編碼器是用來執行解碼器之相反操作的數位電路,一個編碼器有2𝑛 條輸入線
及 n 條輸出線。輸出線產生相對於輸入值的二進位碼。假設在任一時間只有一個
輸入的值為 1。
編碼器可以使用 OR 閘來實現,其輸入直接由真值表決定,當輸入四進位數元是
2,3 時輸出 B 等於 1。當輸入四進位數元是 1,3 時輸出 A 等於 1。這些條件可由
下列布林函數式來表示。 四對二線編碼器真值表

布林函數式 :
B=(I3’‧I2‧I1’‧I0’)
+(I3‧I2’‧I1’‧I0’)
A=(I3’‧I2’‧I1‧I0’)
+(I3‧I2’‧I1’‧I0’)

四對二線編碼器電路

7
1.6 多工器(Multiplexer)
多工器是一種可以從多個輸入訊號中選擇一個訊號進行輸出的器件。特定輸
入線是由一組選擇線來控制。通常,有 2N 條輸入線,N 條選擇線,其位元組合決
定哪一條輸入被選擇。
下圖為一個 2 對 1 線多工器將兩個 1 位元的來源接到一個共同的目的地,如圖。
電路中有兩條資料輸入線(D0﹐D1)、一條輸出線(Y)、和一條資料選擇線(S0)。當
S0=0 時,上面的 AND 閘被致能,輸出 Y 只與 D0 有關,反之,當 S0=1 時下面的 AND
閘被致能,輸出 Y 只與 D1 有關。

布林函數式為
Y = S0'‧D0 + S0‧D1

真值表

二對一線多工器電路

8
1.7 算數邏輯單元(Arithmetic Logic Unit , ALU)
是中央處理器的執行單元,是所有中央處理器的核心組成部分,由及閘和或
閘構成的算術邏輯單元,主要功能是進行二進位的算術運算,如加減乘(不包括
整數除法)。通常有兩個輸入,經由控制線決定執行的運算功能,再輸出計算結
果。
下圖為一 ALU,a 與 b 皆為 8bit 輸入,經由 select 選擇運算功能後由 out 輸出。

9
2. 循序邏輯
2.1 簡介
下圖為一循序電路的方塊圖。其中含有組合邏輯電路及記憶元件,後者連接
到前者形成一個回授路徑。儲存在記憶元件的資料可用來定義循序邏輯電路在當
時的狀態。循序邏輯電路接受訊號後與儲存元件當前狀態一同決定輸出狀態,而
記憶元件狀態則會依據輸入訊號而改變。

循序邏輯電路方塊圖

2.2 儲存元件
數位電路內的儲存元件可無限期的維持二元狀態(只要電源不中斷),直到數
位信號切換狀態。對信號準位操作之儲存元件稱為閂所器(latches);但可由時
脈轉態加以操控的儲存元件稱為正反器。

閂鎖器
又稱之為準位感測器,是所有正反器組成的基本電路,雖然閂鎖器用於記憶
二元資訊相當有用,並可用來設計非同步時序電路,但他們在同步時序電路方面
並不實用。

SR 閂鎖器
SR 閂鎖器是由交連的 NOR 閘或兩個交連的 NAND 閘之電路所組成,他有兩個
輸入端,分別為 S 設置輸入、R 重置輸入。兩個互為補數的輸出端(Q 與 Q')。在
正常情況除非必頇改變狀態,否則閂鎖器兩輸入端應維持為 0。若兩個輸入同時
切換成 1 時,此裝置會進入一個不可預期,或無定義,或一個半穩定狀態,因此
實際應用上兩輸入偕為 1 是被禁止的。
當 S 端輸入 1,將使閂鎖器進入設置狀態(即 Q=1,Q'=0)在其他改變發生前,
S 端必頇先回復到 0,避免進入禁止狀態(S,R 皆為 1)當 R 端輸入 1,將使閂鎖器
進入重置狀態(即 Q=0,Q'=1)。

10
由 NOR 所構成之 SR 閂鎖器 SR 閂鎖器函數表

D 型閂鎖器
一種排除 SR 閂鎖器發生不確定的方法,亦即確保 S 和 R 的輸入不可能同時
為 1,可由下圖完成。此閂鎖器只有兩個輸入:D(資料)和 E(致能)。D 輸入端直
接加入 S 輸入端,而他的補數被加到 R 輸入端。
只要致能輸入為 0,則電路狀態不會改變,當致能輸入為 1 時則會取樣 D 所
輸入之訊號,若 D=1 則 Q 輸出將為 1,反之若 D=0 則 Q 輸出將為 0。D 型閂鎖器
具有將資料保存的能力,它適合被用來作為一單元與其環境之間的暫時儲存。

E D QNEXT

0 X Q 不變

1 0 Q=0

1 1 Q=1

D 閂鎖器邏輯圖

閂鎖器符號圖

11
正反器
閂鎖器被用來當作記憶元件時,會產生重大的困難度。一旦時脈轉變成邏輯
1 準位時,閂鎖器的狀態也跟著改變。當時脈仍維持原狀,閂鎖器的輸出會出現
新的狀態。這個輸出會經由回授路徑過組合電路再連接到閂鎖器的輸入端。當時
脈仍維持在邏輯 1 準位時,若連接到閂鎖器的輸入有所轉變,則閂鎖器會產生新
值,出現新的輸出狀態。這是一個不可預測的結果,因為只要時脈仍維持在有效
準位,閂鎖器的狀態可能會一直改變。
正反器電路的製作方式就是要能使利用相同時脈的循序電路可正確的動作。
有兩種方式可將閂鎖器修正形成正反器,一種是利用閂鎖器形成特殊結構,以隔
離正反器的輸出避免被它轉變中的輸入所影響。另一種是製作僅能在信號轉變
(由 0 轉變到 1 或由 1 轉變到 0)時觸發,而在其餘的時脈期間是禁能的正反器。

正緣觸發 負緣觸發

說明:
1. 正緣觸發正反器在 Ck 正緣讀取資料 D,也在 Ck 正緣立即輸出。
2. 負緣觸發正反器在 Ck 負緣讀取資料 D,也在 Ck 負緣立即輸出。

12
JK 正反器
正反器可執行三種動作:設置為 1、重置為 0,和輸出補數,由於只有單一輸
入,D 型正反器只能設置與重置輸出,利用同步的時脈信號,故具有雙輸入的 JK
正反器可執行以上三種動作。

JK 正反器符號圖 JK 正反器特性表

T 型正反器
T(恆變)型正反器是一種互補式的正反器。當 JK 正反器的兩輸入端連結再一
起,即構成 T 型正反器,當 T=0(J=K=0),時脈邊緣無法改變輸出狀態。當 T=1(J=K=1)
時脈邊緣將產生補述輸出之狀態。此種方式用來設計二進位計數器,相當有用。

T 正反器符號圖 由 JK 正反器製作 T 正反器特性表

T 正反器波型圖

13
暫存器
由一群正反器所組成,每一個正反器可以儲存一個位元的資料。
一個 n 位元的暫存器是由 n 個正反器所構成它可以用來儲存 n 位元的二進位資料,
一個暫存器可含有組合電路以執行特定的資料處理工作。廣義的定義中,一個暫
存器包含一群的正反器及一些會影響他們變換的邏輯閘,正反器保存二進位資料,
而邏輯閘決定這個資料如何轉移至暫存器。
下圖為一個由 4 個 D 型正反器所組成之 4 位元暫存器,共同的時脈輸入在每
個脈波的正緣,觸發所有正反器,將 4 個輸入端的二進位資料同時採入。
若在一個共同的時脈脈波之下,暫存器的所有位元同時被載入,被稱之為並列載
入,在上圖結構下,若暫存器內容必頇維持不變,則輸入端均必頇保持固定或者
時脈不可加入電路,或是可藉由使用一個致能閘來控制時脈輸入信號。

4 位元暫存器

4 位元暫存器波形圖

14
移位暫存器
一個可將二元資料以所指定之單向或雙向位移至其相鄰的暫存器稱為移位
暫存器(Shift Register)。移位暫存器的邏輯結構是由一連串接連成階梯式的正
反器所組成,一個正反器的輸出連接到下一個正反器的輸入。所有正反器接受共
同的時脈脈波,促成資料從某一級移到下一級。
下圖為一並列並出(PIPO)移位暫存器,當 E 為 1 時,多工器會將輸入端資料放入
正反器中,當 E 為 0 時,CLK 每到達正緣時,會觸發將資料到下一暫存器(左移
一位)。

4 位元 PIPO 移位暫存器

波形圖

15
計數器 Counter
暫存器依據輸入時脈,行經規定的狀態順序,稱為計數器。輸入脈波可能是
時脈脈波,或是一些從外在來源產生,這些脈波可能有固定的時間間隔,或是任
意時間間隔的方式。狀態可能是二進位數字順序或是任何狀態順序。
計數器可分成兩種:

漣波計數器
漣波計數器中正反器的輸出轉變被當作是其他正反器的觸發來源。這些正反
器在脈波加入時會將目前狀態轉變為補數形式,而最低有效位元的正反器則接受
外來的計數脈波。下圖為使用 T 型正反器所構成之 4 位元計數器。

4 位元漣波計數器

波形圖

同步計數器
同步計數器與漣波計數器不同,同步計數器的時脈脈波同時加至全部正反器
的輸入,同時觸發所有的正反器。

16
4 位元同步計數器
2.3 記憶體
記憶體單元為儲存格及其相關電路的集合,它是用來轉移資訊進出的裝置。
以一組位元為儲存單元,此一組二元資訊稱為字組(words)。記憶體的字組是一
些位元實體,它可以用來代表個數字、一個指令、或多個文數字元。
數位系統中最常使用的兩種記憶體為:
隨機存取記憶體(RAM) 可以執行寫入及讀取這兩者操作。
唯讀記憶體(ROM) 只能讀取而不能寫入。

2.4 CPU 結構

中央處理器執行工作的程序敘述如下:
1. 指令經由輸入通道存放在記憶體內。
2. 程式計數器指向第一個存放位置。
3. 指令暫存器依據程式計數器提取所指位置的指令,放入指令解碼器;
同時將程式計數器增加,指向下一個位置。
4. 指令解碼器接受指令暫存器傳來之指令後,加以解碼。
5. 依據解碼結果,經由控制線發出控制訊號,控制各相關單元進行適當之處理
(例如運算或輸出入)
6. 等到指令執行完畢後,再通知指令暫存器提取下一指令。
7. 依次重複循環,直到程式執行完畢為止。

17
3. 習題
1. 依照下圖邏輯閘接線,依照表中所給的輸入端情況填出輸出端狀況

A B C D OUT2 OUT1
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1

18
2. 依照前面所敘述的漣波加法器結構,假設下列幾組情況
(1)A=0110,B=1000 (2) A=0111,B=1010 (3) A=1010,B=1011
列出下表
i 3 2 1 0
輸入進位 Ci
被加數 Ai
加數 Bi
和 Si
輸出進位 Ci+1

3. 依據下列真值表畫出邏輯閘接線圖
(1)

(2)

4. 依據下列真值表畫出邏輯閘接線圖
(1)

19
(2)

5. 請畫出一個 8 對 1 線多工器方塊圖,並列出真值表。

6. 請依據下列真值表與輸入情況計算出結果(out=?)
(1)S=00,A=1110,B=0011;
(2)S=01,A=1000,B=0010;
(3)S=10,A=1010,B=0011;
(4)S=11,A=1110,B=1111;
S 輸入 運算功能
0 0 A-B
0 1 A+3
1 0 A+B
1 1 B-1

7. 根據下列波形圖畫出 JK 型、T 型正反器的輸出情況(輸出端 Q)


(1)

20
(2)

8. 請畫出一個從 0 數到 7 的同步負緣觸發的計數器。

21
第二章 微算機簡介

1. 單晶片控制器概論
在資訊科技的時代,半導體積體電路技術扮演很重要的角色,藉由半導體技
術的發展,半導體的線條寬度縮小到 0.18 微米,密度提昇,集積電晶體
(Transistor)數量增加,而功能逐步提升。未來集積體電晶體數將在 10 億以上,
可以將整個系統做在單一晶片上。因此單晶片系統,就是建立於矽晶片之大型系
統,內嵌入式軟體、微處理器、數位訊號產生器、類比電路和邏輯電路等。
微控制器產品架構因應不同的應用與介面需求,而衍生出不同規格的產品。
由早期以累積器為基礎的中央處理器,演進至現今含精簡指令(RISC)或同時含
RISC、數碼訊號產生器 DSP 和 32 位元嵌入式微控制器,現今產品已位元區分成
4 位元、8 位元及 16 位元等系列,例如 Intel MCS-51 的 8 位元系列、Toshiba
87CXX 的 8 位元系列等。

圖 2.1 微電腦系統基本方塊圖

22
2. 計算機動作流程

步驟 1: 首先,CPU 中的程式計數器會將存放在程式計數器中的下一個要執行的
程式所存放的記憶體位址丟到位址匯流排上,以便讓 CPU 到程式所在的記憶體位
址取得資料。
步驟 2: 接著 CPU 藉由控制匯流排給予讀取訊號,用以告知記憶體要到哪個位址
取得將要執行的程式所相對應的機械碼資料。
步驟 3:接著記憶體接收到要求的訊號,將資料經由資料匯流排傳送給 CPU 執行。
步驟 4:最後程式計數器 PC 內存放的位址+1,儲存下一個要執行的程式所存放的
記憶體位址。
一直重複步驟 1~步驟 4 即為 CPU 執行程式指令的流程。

資料暫存器(Data registers)
這個 CPU 內有十六組 16bit 資料暫存器,用十六進制表示為(0~F),但我們
定義它們為 R0 到 R15。在大多數的指令中,它們保存 16 位元資料,但是一些指
令中它們會保存其他的資訊。

23
控制單元(Control unit)
控制單元必頇在每個週期中控制 ALU 的運算操作,連通到記憶體或是 I/O
子系統。除此外還有兩個暫存器,程式計數器(PC)和指令暫存器。PC 可以保存 8
位元,保存要執行程式的所在位址。PC 的內容將指向要執行的指令在記憶體所
在的位址。之後在每一個機械週期後 PC 內的值將加一,指向下一條要執行的指
令在記憶體所在的位址。而指令暫存器(instruction registers ,IR )將保存被
解碼的指令,一個 16 位元的值。

24
主記憶體(Main memory)
主記憶體有 256 組 16 位元的記憶區塊,用二進制表示位址是 00000000 到
11111111,用 16 進制表示是 0x00 到 0XFF 主要記憶體保存資料與程式指令。記
憶體中的前 64 個位址(0X0 到 0X40)專門用來保存程式指令,而 0X40 到 0XFD 用
來保存資料。0XFE 與 0XFF 作為輸出入介面
下列是一個 2n 組 4 位元寬的記憶體,每個方塊是一個記憶單元,靠著 2 條
位址線通過解碼器選取要使用的記憶體,當需要寫入時致能,並會在時脈的邊緣
寫入資料。

25
輸入/出子系統(Input / Output subsystem)
這個簡單的計算機有一個非常原始的輸入/出子系統,這個子系統包含一個
鍵盤跟螢幕,分別對應到記憶體位址 0XFE 與 0XFF

指令設定
每個計算機指令包含兩個部分運作碼(operation code,OPCODE),運算元
(operand),OPCODE 指定對運算元所做運算的類型。每個指令含有 16 個位元,
每 4 位元的範圍作為一組,最高的 4 位元容納 OPCODE,剩下的三個部分容納運
算元或是位址。

並不是每一個指令都需要三個運算元,當運算元不需要使用時用 0x0 來填滿。


舉例來說 HALT(停頓)指令內有三個運算元都是 0X0,MOVE 與 NOT 指令,只有最
後一個運算元是 0X0。同時暫存位址用 4 位元來定址但記憶體範圍採用 8 位元來
定址。下列為各區塊代表之功用

26
Instruction Code Operands Action
d1 d2 d3 d4
HALT 0 無動作
LOAD 1 RD MS RD=MS
STORE 2 MD RS MD=MS
ADDI 3 RD RS1 RS2 RD=RS1+RS2
ADDF 4 RD RS1 RS2 RD=RS1+RS2
MOVE 5 RD RS RD=RS
NOT 6 RD RS RD=RS’
AND 7 RD RS1 RS2 RD=RS1 AND RS2
OR 8 RD RS1 RS2 RD=RS1 OR RS2
XOR 9 RD RS1 RS2 RD=RS1 XOR RS2
INC A R R=R+1
DEC B R R=R-1
ROTATE C R N 0 OR1 Rotn R
JUMP D R N R0 不等於 R,PC=N
備註:
R 代表暫存器、M 代表記憶體
D 代表目的、S 代表來源

表 2.1 計算機指令表
上表中有兩個 ADD 指令 ADDI 是整數的相加,ADDF 是浮點數的相加,當有資
料藉由輸入端進入,可以使用 LOAD 指令來讀取 0XFE 的輸入資料,另外可以藉由
STORE(保存)指令來寫入記憶體 0XFF。當 ROTATE(旋轉)指令 d4 部分為 0 時,右
移暫存器 R 值 N 位元。d4 部分為 1 時,左移暫存器 R 值 N 位元。另外還有遞增
(INC),遞減(DEC)指令。

執行指令
這個計算機使用一個機械週期,一個週期處理三個部分。指令的擷取(fetch)、
解碼(decode)、執行(execute)。在擷取階段,從 PC 的值擷取記憶體的內容到
IR。然後 PC+1 指向下一個程式位址。進入解碼階段,在 IR 中的指令根據運算碼
決定操作型態。再進入執行階段運算得出結果寫入到暫存器或記憶體。當下一個
周期開始,PC 已經指向下一個位址,將繼續執行下一條指令,除非遇到 HALT 指
令。

27
舉例
當兩個整數 A 與 B 進行相加產生結果 C

為了解決這個問題,必頇先將兩個資料 A 與 B 載入進兩個暫存器(以 R0 與
R1 來儲存),運算結果必頇保存在第三個暫存器(用 R2 暫存器),ALU 只可以將資
料寫入暫存器,因此需要使用 STORE 指令再將暫存器內資料寫入記憶體。
假設兩個整數分別存在記憶位址 0X40 與 0X41,結果必頇存在 0X42,這代表
必頇先講兩個數載入,再將結果從暫存器儲存到記憶體。以下是程式範例:
1. 載入(LOAD)記憶體位址 0X40 內的值到 R0 暫存器(R0=M40)
2. 載入(LOAD)記憶體位址 0X41 內的值到 R1 暫存器(R1=M41)
3. 相加(ADDI)R0 與 R1 的內容放入 R2 暫存器(R2=R0+R1)
4. 保存(STORE)R2 暫存器的內容到記憶體位址 0X42(M42=R2)
5. 停頓(HALT)
根據這個計算機的設計,這五條指令將被編碼為:
Code 說明
1040 1:LOAD 0:R0 40:M40
1141 1:LOAD 1:R1 41:M41
3201 3:ADDI 2:R2 0:R0 1:R1
2422 2:STORE 42:M42 2:R2
0000 0:HALT
可以將這五條指令保存在記憶體 0x0 到 0x4,運算用的資料保存在 0x40 到 0x42。

週期(Cycle)
這個計算機每個指令使用一個週期來運作,如果有一個五條指令的程式,就
必頇使用五個週期來執行。每個周期都將執行之前提到的三個步驟:擷取、解碼、
執行假。假設我們將計算 161+254=415,這些數字在記憶體中用 16 進制表示是
0X00A1、0X00FE、0X019F。

28
Cycle 1
PC 指向程式的第一個指令,控制單元開始動作
1. 控制單元擷取記憶體位址 0X00 內儲存的指令,並放入 IR 暫存器,
完成後 PC 的值加 1。
2. 控制單元解碼指令 0X1040 後得到 R0=M40。
3. 控制單元執行指令,從記憶體位址 0X40 複製一個值到暫存器 R0。

29
Cycle 2
PC 指向程式的第二個指令,控制單元開始動作
1. 控制單元擷取記憶體位址 0X01 內儲存的指令,並放入 IR 暫存器,
完成後 PC 的值加 1。
2. 控制單元解碼指令 0X1141 後得到 R1=M41。
3. 控制單元執行指令,從記憶體位址 0X41 複製一個值到暫存器 R1。

30
Cycle 3
PC 指向程式的第三個指令,控制單元開始動作
1. 控制單元擷取記憶體位址 0X02 內儲存的指令,並放入 IR 暫存器,
完成後 PC 的值加 1。
2. 控制單元解碼指令 0X3201 後得到 R2=R0+R1。
3. 控制單元執行指令,將 R0 與 R1 內值相加放入 R2。

31
Cycle 4
PC 指向程式的第四個指令,控制單元開始動作
1. 控制單元擷取記憶體位址 0X03 內儲存的指令,並放入 IR 暫存器,
完成後 PC 的值加 1。
2. 控制單元解碼指令 0X2422 後得到 M42=R2。
3. 控制單元執行指令,R2 內值複製到記憶體位址 0X42。

32
Cycle 5
PC 指向程式的第四個指令,控制單元開始動作
1. 控制單元擷取記憶體位址 0X04 內儲存的指令,並放入 IR 暫存器,
完成後 PC 的值加 1。
2. 控制單元解碼指令 0X0000 後得到 HALT。
3. 計算機執行指令,停止運作。

33
範例
假設目前記憶體內沒有值,需要藉由輸入介面輸入數值進入計算機中
需要以下幾個步驟:
1. 從記憶體 0XFE 讀取輸入到暫存器 0XF
2. 將 0XF 值寫到記憶體 0X40 LOAD 0XF 0XFE 0X1FFE
3. 從記憶體 0XFE 讀取輸入到暫存器 0XF STORE 0X40 0XF 0X240F
4. 將 0XF 值寫到記憶體 0X41 LOAD 0XF 0XFE 0X1FFE
5. 從記憶體 0X40 讀取輸入到暫存器 0X0 STORE 0X40 0XF 0X241F
6. 從記憶體 0X41 讀取輸入到暫存器 0X1 LOAD 0X0 0X40 0X1040
7. 相加 R0 與 R1 放入 R2 LOAD 0X1 0X41 0X1141
8. 將 R2 值存入記憶體 0X42 ADDI 0X2 0X0 0X1 0X3201
9. 從 0X42 讀值放入暫存器 0XF STORE 0X42 0X2 0X2422
10. 寫入輸出記憶體位址 0XFF LOAD 0XF 0X42 0X1F42
11. 停止 STOR 0XFF 0XF 0X2FFF
HALT 0X0000

34
CPU如何與記憶體溝通

若 C = 1,則輸出Y = A
正常輸入 A 若 C = 0,則輸出Y為高阻

(無效)

控制輸入 C

三態緩衝閘示意圖

35
3. TMS320F2812 數位訊號處理器簡介
TMS320F2812 是由 TI 公司所出品的一顆 32 位元混合信號 DSP 元件,結合高
效能 DSP、高精準度類比功能和快閃記憶體於單顆晶片,可提供 150-MIPS 運算
速度、單週期 32x32 位元乘法累加計算能力、256KB 內建快閃記憶體和晶片內建
12 位元類比數位轉換器(ADC),以 32 位元 TMS320C28xTM DSP 核心為基礎,能夠
高效率執行 C/C++程式;還享有一個虛擬浮點數學程式庫支援,可大幅減少應用
發展的困難程度。TMS320F2812 功能方塊圖如圖 2.2

圖 2.2 TMS320F2812 功能方塊圖(TI 公司生產)。

36
3.1 TMS320F2812 晶片的主要功能:
1. 高性能靜態 CMOS 製成技術
(1) 150MHz(6.67ns 週期時間)
(2) 省電設計(1.8V Core,3.3V I/O)
(3) 3.3V 快取可程式電壓
2. JTAG 掃描支援
3. 高效能 32Bit CPU
(1) 16 x 16 和 32 x 32 MAC Operations
(2) 16 x 16 Dual MAC
(3) 哈佛匯流排結構
(4) 快速中斷響應
(5) 4M 線性程式定址空間(Linear Program Address Reach)
(6) 4M 線性資料定址空間(Linear Data Address Reach)
(7) TMS320F24X/LF240X 程式核心相容
4. 晶片上(On-Chip)的記憶體
(1) 128K x 16 Flash(4 個 8K x 16,6 個 16K x 16)
(2) 1K x 16 OTP ROM(單次可程式唯讀記憶體)
(3) L0 和 L1:2 組 4K x 16 SARAM
(4) H0:1 組 8K x 16 SARAM
(5) M0 和 M1:2 組 1K x 16 SARAM
共 128K x 16 Flash,18K x 16 SARAM
5. 外部記憶體介面
(1) 支援 1M 的外部記憶體
(2) 可程式的 Wait States
(3) 可程式的 Read/Write Strobe Timing
(4) 三個獨立的晶片選擇 (Chip Selects)
6. 時脈與系統控制
(1) 支援動態的相位鎖定模組(PLL)比率變更
(2) On-Chip 振盪器
(3) 看門狗計時器模組
7. 三個外部中斷
8. 週邊中斷擴展方塊(PIE),支援 45 個週邊中斷
9. 128 位元保護密碼
(1) 保護 Flash/ROM/OTP 及 L0/L1 SARAM
(2) 防止韌體逆向工程
10. 三個 32 位元 CPU Timer

37
11. 馬達控制週邊
(1) 兩個事件管理模組(EVA,EVB)
(2) 與 240xA DSP 相容
12. 串列埠週邊
(1) 同步串列週邊介面 SPI 模組
(2) 兩個非同步串列通訊介面 SCI 模組,標準 UART
(3) eCAN(Enhanced Controller Area Network)
(4) McBSP With SPI Mode
13. 13. 16 個通道 12 位元類比-數位轉換模組(ADC)
(1) 2x8 通道的輸入多工
(2) 兩個獨立的取樣-保持(Sample-and-Hold)電路
(3) 可單一或同步轉換
(4) 快速的轉換率:80ns/12.5MSPS

38
4. TMS320F28335 數位訊號處理器簡介
TMS320F28335 功能方塊圖如下圖

39
4.1 TMS320F28335 晶片的主要功能:
1. 高性能靜態 CMOS 製成技術
(1) 150MHz(6.67ns 週期時間)
(2) 省電設計(1.8V Core,3.3V I/O)
(3) 3.3V 快取可程式電壓
(4) 浮點運算器
2. JTAG 掃描支援
3. 高效能 32Bit CPU
(1) 16 x 16 和 32 x 32 MAC Operations
(2) 16 x 16 Dual MAC
(3) 哈佛匯流排結構
(4) 快速中斷響應
(5) 4M 線性程式定址空間(Linear Program Address Reach)
(6) 4M 線性資料定址空間(Linear Data Address Reach)
(7) TMS320F24X/LF240X 程式核心相容
4. 晶片上(On-Chip)的記憶體
(1) 128K x 16 Flash(4 個 8K x 16,6 個 16K x 16)
(2) 1K x 16 OTP ROM(單次可程式唯讀記憶體)
(3) L0 和 L1:2 組 4K x 16 SARAM
(4) H0:1 組 8K x 16 SARAM
(5) M0 和 M1:2 組 1K x 16 SARAM
共 128K x 16 Flash,18K x 16 SARAM
5. 外部記憶體介面
(1) 支援 1M 的外部記憶體
(2) 可程式的 Wait States
(3) 可程式的 Read/Write Strobe Timing
(4) 三個獨立的晶片選擇 (Chip Selects)
6. 時脈與系統控制
(1) 支援動態的相位鎖定模組(PLL)比率變更
(2) On-Chip 振盪器
(3) 看門狗計時器模組
7. 三個外部中斷
8. 週邊中斷擴展方塊(PIE),支援 45 個週邊中斷
9. 128 位元保護密碼
(1) 保護 Flash/ROM/OTP 及 L0/L1 SARAM
(2) 防止韌體逆向工程
10. 三個 32 位元 CPU Timer

40
11. 馬達控制週邊
(1) 兩個事件管理模組(EVA,EVB)
(2) 與 240xA DSP 相容
12. 串列埠週邊
(1) 同步串列週邊介面 SPI 模組
(2) 兩個非同步串列通訊介面 SCI 模組,標準 UART
(3) eCAN(Enhanced Controller Area Network)
(4) McBSP With SPI Mode
13. 16 個通道 12 位元類比-數位轉換模組(ADC)
(1) 2x8 通道的輸入多工
(2) 兩個獨立的取樣-保持(Sample-and-Hold)電路
(3) 可單一或同步轉換
(4) 快速的轉換率:80ns/12.5MSPS

41
5. 習題
1. 根據表 2.1 簡易計算機的指令,嘗試解決 D=A+B+C
假設 A 在記憶體 0X40,B 在記憶體 0X60,C 已經在暫存器 0XD,並將結
果寫到記憶體位址 0X86。請先將指令列出,再進行編碼。
2. 先將下列指令反組譯後,試說明下列指令執行時暫存器 PC、IR 與使用到的
所有暫存器在每個周期的變化。假設記憶體 0X50 到 0X5A 內為 0X0 到 0X5A,
其餘位址 0X5B~0XFF 皆為 0X11。
0X1A52
0X1F55
0X255A
0X1A5C
0X1157
0X3CAA
0XAA00
0X0000
3. 試畫出一個有兩組寬度兩位元的記憶體解碼電路,並說明各條線功用
4. 何謂單晶片系統,其主要的內部結構為何?
5. 傳統的單晶片(例如 8051)與 DSP 有何差別,兩者各有何的優缺點?
6. MIPS, CISC, 及 RISC 是何者縮寫?請說明其意義。
7. TMS320F28335 與 TMS320F2812 有哪些差異?

42
第三章 數碼與文數碼
在電腦中常用的碼可以分成兩大類:一種為用來表示數字性資料的數碼
(numeric code),例如二進碼(binary code)與 BCD(binary coded decimal)碼;
另一種則為用來表示非數字性資料的碼稱為文數字碼(alphanumeric code),例
如 ASCII 碼(American Standard Code for Information Interchange)。本章中
將依序討論這幾種在電腦中常用的文數字碼與數碼。

1. 文數字碼
在電腦中最常用的文數字碼為一種由美國國家標準協會(American
National Standards Institute)所訂定的,稱為 ASCII 碼,如表 3.1 所示。這
種 ASCII 碼使用 7 個位元代表 128 個字元(character,或稱符號,symbol)。例
如:1001001B 代表英文字母"I";而 01lllOOB 則代表符號"<"。

表 3.1 ASCII 碼

43
<範例說明:文數碼在記憶體中的儲存>
範例程式 ex3_1.asm:

程式中儲存的資料為
而實際在記憶體位址中的儲存為

44
表 3.2 ASCII 碼功能字元定義
大致上 ASCII 碼可以分成可列印字元(printable character)與不可列印字
元(nonprintable character)兩種。可列印字元為那些可以直接顯示在螢幕上或
者直接由列表機列印出來的字元;不可列印字元又稱為控制字元(control
character),其中每一個字元均有各自的特殊定義。這些控制字元的定義列於表
3.2 中。

常用的幾種控制字元類型為:
格式控制字元 (format control character):BS、LF、CR、SP、DEL、ESC、
與 FF。
資訊分離字元(information separator):FS、GS、RS、與 US。
傳輸控制字元(transmission control character):SOH、STX、ETX、ACK、
NAK、與 SYN。

2. 數碼
代表數字的數碼一般均由一組固定數目的位元組成,這些位元稱為一個碼語
(code word)。依據碼語中每一個位元(一個二進制的數字稱為一個位元)所在的
位置是否賦有固定的權重(weight),數碼又可以分成權位式數碼(weighted code)
與非權位式數碼(non-weighted code)兩種。在前者中的每一個位元的位置均賦
有一個固定的比重(或稱加權);在後者中則無。

45
在權位式數碼中,若設 、 、...、 分別為碼語中每一個數字的加權,而假
設 分別為碼語中的每一個數字,則其相當的十進制數目值=XnWn+Xn-1Wn-1
+...+X1W1。當 Xi 的值只能為{0,1}時,該數碼的基底為 2,此種數碼稱為二進
制數碼;當 Xi 的值只能為{0,1,2,3,4,5,6,7,8,9}時,該數碼的基底為 10,此
種數碼稱為十進制數碼;當 Xi 的值可以為{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
時,該數碼的基底為 16,此種數碼稱為十六進制數碼。
常用的二進制權位式數碼如表 3.3 所示。(8421)碼為最常用的一種,它即為
電腦中所謂的二進制數目或二進碼,此種數碼的碼語寬度(即 n 的值)可以為任何
位元數目(BCD 碼的意義為自 4 位元的二進碼之 16 個碼語中任取 10 個,以表示
十進制中的十個數字,因此共有 C(16,10)=8008 種組合。在這些組合中,大部分
均為非權位式數碼,然而有一種組合不但具有加權持性而且其加權恰為
(8,4,2,1),這一種 BCD 碼即是我們所慣用的(8,4,2,1)BCD 碼或簡稱 BCD 碼。在
任何一個非權位式數碼中,其十進制值並無法直接由碼語中的位元值計算出來,
因為每一個位元並沒有對應到一個固定的加權。常用的非權位式數碼例如加三碼
與循環碼如表 3.3 所示。
由於加三碼的形成是將 BCD 碼中的每一個碼語加上 3(0001),因而得名;循
環碼的主要特性是其任何兩個相鄰的碼語之間,均只有一個位元不同,例如:
1000(15)與 1001(14)、0000(0)與 0001(1)、及 1000(15)與 0000(0)。

表 3.3 電腦中常用的數碼

46
3. 數系轉換
在電腦中,最常用的數目系統為二進制、十進制、與十六進制。

3.1 二進制數目系統
在二進制數目系統中,每一個正數均可以表示為下列多項式:
q 1
N 2  a q 1 2 q 1  ......  a0 2 0  a 1 2 1  ......  a  p 2  p  a 2
i  p
i
i

或用數字串表示:

(aq1aq2 ......a‧
0 a 1 a  2 ......a  p ) 2

其中 a q 1 稱為最大有效位元(most significant bit,MSB); a  p 稱為最小有效位元

(least significant bit,LSB)。這裡所謂的位元(bit)實際上是指二進制的數字


(0 和 1)。位元的英文字(bit)其實即為二進制數字(binary digit)的縮寫。注意

上述多項式或數字串中的係數 a i 之值只有 0 和 1。

二進制轉換為十進制
轉換一個二進制數目為十進制的程序相當簡單,只要將係數(只有 0 和 1)為
1 的位元所對應的加權( 2 i )以十進制的算數運算相加即可。如下面例題。

<例 3.1>

47
十進制轉二進制
當數目較小時,可以依上上述例題的相反次序為之。如下面例題。

<例 3.2>

但是當數目較大時,上述方法將顯的笨拙而不實用,因而需要一個較有系統
的方法。一般在轉換一個十進制數目為二進制時,均將整數部分與小數部分分開
處理:整數部份以二連除後取其餘數;小數部分則以 2 連乘後取其整數。整數部
分轉換規則如下:
1. 以 2 連除該整數,取其餘數。
2. 以最後得到的餘數為最大有效位元(MSB),並且依照餘數取得的相反次序寫
下餘數即為所求。
下列例題將說明此種轉換程序。

<例 3.3>

48
在上述的轉換過程中,首次得到的餘數為 LSB,而最後得到的餘數為 MSB。
小數部分的轉換規則如下:
1. 以 2 連乘該數的小數部分,取其乘積的整數部分。
2. 以第一次的到的整數為第一位小數,並且依照整數取得的次序寫下整數即為
所求。
下面例題將說明此種轉換程序。

<例 3.4>

小數部分的轉換有時候是個無窮盡的程序,這時候可以依照需要的精確值在適當
的位元處終止即可。

3.2 十六進制數目系統
在數目系統中,當基底為 16 時,稱為十六進制系統。在此數目系統中,每
一個正數均可以表示為下列多項式:

或用數字串表示:

其中 a q 1 稱為最大有效數字(most significant digit,MSD); a  p 稱為最小有效

數字(least significant digit,LSD)。 a i 之值可以為

(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)中之任何一個,其中 A~F 也可以使用小寫


的英文字母 a~f 取代。

49
在十六進制系統中,代表數目的數字共有十六個,除了十進制中的十個符號
之外,又添加了六個,它們為 A、B、C、D、E 與 F。表 3.4 列出了十進制、二進
制、與十六進制之間的關係。
十六進制為電腦中常用的數目系統之一,其數目的表示容量最大。例如同樣使用

二位數而言,十六進制所能表示的數目範圍為 0 到 255(即 0016 到FF16 );十進制

為 0 到 99;二進制則只有 0 到 3(即 00 2 到112 )。

表 3.4 十進制、二進制與十六進制之間的關係

二進制轉換為十六進制
轉換一個二進制數目為十六進制的程序相當簡單,只要將該二進制數目以小數點
分開後,分別向左(整數部分)及向右(小數部分)每四個位元集合成為一組後,再
參照表 3.4 求取對應的十六進制數字,即可求得結果的十六進制數目。例如下面
例題。

<例 3.5>

50
十六進制轉換為二進制
轉換一個十六進制數目為二進制的過程相當簡單,只要將該十六進制數目中
的每一個數字,以表 3.4 中對應的 4 個二進制位元取代即可。例如下面例題。

<例 3.6>

十六進制轉換為十進制
與轉換一個二進制數目為十進制的程序類似,只要將十六進制數目中的每一個數
字乘上其所對應的加權( 16 i ),然後以十進制的算數運算相加即可。例如下面例
題。

<例 3.7>

十進制轉換為十六進制
與轉換一個十進制數目為二進制的程序類似,只是現在的除數(或乘數)為
16 而不是 2。例如下面例題。

<例 3.7>

51
有時為了方便,在轉換一個十進制數目為十六進制時,常先轉換為二進制數目,
然後再由二進制數目轉換為十六進制。這種方式雖然較為複雜,但卻以較熟悉的
以 10 為除數或乘數的簡單運算取代了在上述過程中的以 16 為除數或乘數的繁雜
運算。
<範例說明:數值在記憶體中的儲存>
範例程式 ex3_2.asm:

程式中儲存的資料為 12, -12, 12h, -12h (負數的部分會轉成補數來儲存)


而實際在記憶體位址中的儲存為

4. 二進制算數
在電腦系統中,數目的表示方法可以分成兩種:未帶號數(unsigned number)
及帶號數(signed number)。未帶號數沒有正數與負數的區別,全部視為正數;
帶號數則有正數與負數的區別。在電腦系統中,常用的帶號數表示方法有符號大
小表示法(sign-magnitude representation)與 2 補數表示法(two's complement
representation)兩種。

4.1 二進制的四則運算
所謂的四則運算是指算術中的四個基本運算:加、減、乘與除。基本上,二
進制的算術運算和十進制是相同的,唯一的差別是在二進制中,若為加法運算,
則逢 2 即需要進位;若為減法運算,則由左邊相鄰的數字借位時,所借的值為 2
而不是 10。同樣地,二進制的乘法運算可以視為加法的連續運算;而二進制的
除法連算則可以視為減法的連續運算。

52
<例 3.9 二進制加法>

<例 3.10 二進制減法>

<例 3.11 二進制乘法>

53
<例 3.12 二進制除法>

4.2 數目表示法
在電腦系統中,一般用來表示帶號數的方法是保留最左端的位元做為正數或
負數的指示之用,這個位元稱為符號位元(sign bit),對於正的定點數
(fixed-point number)而言,符號位元設定為 0,而其它位元則表示該數的真正
大小。
若設 N2 表示在二進制中的一個具有 n 個位元(包括符號位元)整數與 m 個位
元小數的數目,則正數的 N2 可以表示為下列字元串:

而 N2 的大小等於

對於負的定點數而言,其符號位元設定為 1,而其它位元是否直接表示該數之大
小與否,則由所用的數目表示法為符號大小表示法或 2 補數表示法決定。在符號
大小表示法中,當符號位元為 1 時,其它位元則表示該數的真正大小,因此 N2
的大小和上式相同。在 2 補數表示法中,當符號位元為 1 時,其它位元並不直接
表示該數的真正大小,而必頇將之取 2 補數之後才是數目的值。

54
2 補數的取法相當簡單,若設 N 2 表示 N 2 的 2 補數,則 N 2 = 2 n - N 2

<例 3.13>

另一種 2 補數的取法為將數目種的每一個位元取其補數(即將 0 位元變為 1


位元而 1 位元變為 0 位元)後,再將 1 加到最小有效位元(LSB)上。下面例題說明
此一方法。

<例 3.14>

2 補數表示法的特性如下:
1. 只有一個 0(即 000……0)
2. MSB 為符號位元,若數目為正,則 MSB 為 0,否則 MSB 為 1。
n 1
n 位元的 2 補數表示法表示範圍為  2  1。
n -1
3. 到2

4. 一數取 2 補數後再取 2 補數,將恢復為原來的數。

4.3 2 補數算數運算
由於負數可以使用 2 補數表示法表示,因此加法與減法可以合併成為一
個相同的運算,稱為 2 補數加法運算。其規則如下:

55
兩數均為正數
當兩數均為正數時,將兩數相加(包括符號位元及大小),若結果的符號位元
為 1,表示溢位發生,結果錯誤;否則,若結果的符號位元為 0,表示沒有溢位
發生,結果正確。

<例 3.15>

兩數均為負數
當兩數均為負數時,將兩數相加(包括符號位元及大小)並捨去進位(由符號
位元相加而得),若結束的符號位元為 1,表示沒有溢位發生,結果正確;否則,
若結果的符號位元為 0,表示溢位發生,結果錯誤。

<例 3.16>

56
兩數中一個為正數另一個為負數
當兩數中一個為正數另一個為負數時,將兩數相加(包括符號位元及大小),
若正數的絕對值較大時,有進位產生;否則,若負數的絕對值較大時,
沒有進位產生。產生的進位需捨去,而且在這種情形之下不會有溢位發生。
若將上述規則加以歸納整理後,可以得到下列兩項較簡捷的規則:
1. 將兩數相加;
2. 觀察符號位元的進位輸入與進位輸出狀況,若符號位元同時有(或沒有)進位
輸入與輸出,則結果正確;否則,有溢位發生,結果錯誤。

<例 3.17>

<範例說明:補數在記憶體中的儲存>
範例程式 ex3_3.asm:

程式中儲存的資料為-10110011101b (b 表示二進制)
在儲存時會將資料轉換成 2 的補數儲存
而-10110011101b 的補數為 11111010011000112 即為 FA6316
故記憶體中儲存的資料為

57
5. 定點算數
5.1 定點表示法
在定點表示法中約定:所有數據的小數點位置固定不變。通常,把小數點固
定在有效數位的最前面或末尾,這就形成了兩類定點數。

定點小數
數點的位置固定在最高有效數位之前,符號位之後,記作 Xs.X1X2…Xn , 此
數是一個純小數。定點小數的小數點位置是隱含約定的,小數點並不需要真正地
佔據一個二進制位。

當 Xs=1,表示 X 為負數,此時情況要稍微複雜一些,這是因為在計算機中帶符
號數可用補碼表示,也可用原碼表示。如前所述,原碼與補碼所能表示的絕對值
最大的負數是有區别的,所以原碼和補碼的表示範圍有些差别。

58
定點整數
小數點位置隱含固定在最低有效數位之後,記作 XsX1X2…Xn ,這個數是一
個純整數。

5.2 定點與浮點表示法的比較
假設定點數和浮點數的字長相同
1. 數值的表示範圍:浮點表示法所能表示的數值範圍將遠大於定點數。
2. 精度:浮點數雖然擴大了數的表示範圍,但這正是以降低精度為代價的,也
就是數軸上各點的排列更稀疏了。
3. 數的運算:浮點運算要比定點運算複雜得多。
4. 溢出處理:在定點運算時,當運算結果超出數的表示範圍,就發生溢出。而
在浮點運算時,運算結果超出尾數的表範圍卻並不一定溢出,只
有當階碼超出所能表示的範圍時,才發生溢出。

59
6. 浮點算數
在定點數的算數運算中,均假設小數點固定在某一個特定的位置上,運常為
LSB 的右邊。這種定點數數目的最大缺點為其能表示的數目範圍;在 n 位元的 2
補數表示法中只為  2 n1 到2 n1  1;在 n 位元的符號大小表示法中只為-( 2 n1 -1)
到 2 n1  1 。
若要表示更大範圍的數目則必頇使用較多的位元,或者使用浮點數格式
(floating point format),將 n 位元的語句分成:指數(exponent,e)與假數
(mantissa,m)兩部份,而將一個數目表示為 m  2 e 。與定點數的表示方法比較之
下,假設只考慮未帶號的情形,若 n 為 32 位元,e 為 10 位元、則 m 為 20 位元,
能表示的數目範圍為 m  21024  m  10308 ,遠超過定點數的未帶號數目的

232 ( 4.29  109 ) 。浮點數格式也稱為科學記法(scientific notation)。

6.1 浮點數表示法
如前所述,浮點數表示方法為將一個 n 位元的語句分成:指數與假數兩部份,
而將一個數目表示為 m  2 e ,如圖 3.1 所示。一般為了方便,均將浮點數表示的
假數標準化為的格式。若運算後的結果為 0.001...  2 e ,則在標準化之後為
0.1...  2 e2 ;同樣的,若運算後的結果為 10.01...  2 e ,則在標準化之後為
0.1...  2 e2 。
將假數標準化的最大理由為能獲取最大的有用精確值,例如未標準化的 8
位元假數 0.0001011 只有 4 個有效位元,而標準化的 8 位元假數 0.10110lO1 則
有 8 個有效位元。與定點數的表示法相同,在浮點數表示法中,除了正數之外也
希望能表示負數。在浮點數表示法中,共有兩個不同的量;指數與假數,這些都
可能為正或負,因此必頇有適當的方法表示它們。

圖 3.1 使用指數與假數的方法儲存一個浮點數目
如前所述,在假數的表示方法中常用的有符號大小及 2 補數等兩種方法。首
先,考慮 2 補數的表示方法。一個正的浮點數 x 在標準化後的格式如下:
x=0.100…0 到 0.111…1
即 1/2≦x<1。一個負的浮點數 x 在標準化後的 2 補數格式如下:
x=1.011…1 到 1.000…0
即-1≦x<-1/2。

60
其次,考慮符號大小的表示方法,這一種方法使用在 IEEE754 的浮點數標準
格式中。在這一種表示方法中,一個正的浮點數 x 在標準化後的格式如下:
x=1.000…0 到 1.111…11
即 1≦x<2。一個負的浮點數 x 在標準化後的格式如下:
x=-1.000…0 到-1.111…11
即-2<x≦-1。
在浮點數表示法中,除了假數有正或負之外,指數也有正或負,因此必頇有
適當的方法表示它。在電腦中,常用的指數表示方法一種稱為偏移指數(biased
exponent)的方法。所謂的偏移指數即是:若指數部分共有 m 個位元,因此共有 個
組合,即它可以表示未帶號數的 0 到 -1,現在如果重新指定每一種組合所代表
的意義,則就有可能同時用以表示正或負的指數,最常用的方法為將每一個指數
值均減去一個固定的偏移量(bias),例如 ,因而其範圍變為 。例如下面例題。

<例 2.18>偏移指數

IEEE754 浮點數標準格式
IEEE754 浮點數標準格式為一種標準化的浮點數表示方法,其假數(m)範圍
為 1≦m<2,即其假數的整數部分永遠為 1。
一個 lEEE754 的數目 x 定義為:

其中 s 為符號位元;
0 為正數;1 為負數
e 為指數;bias 為偏移量
m 為假數
IEEE754 的標準共定義了單精確制(single precision)、雙精確制(double
precision)、四倍精確制(quad precision)等三種,這些格式的指數位元數目,
假數位元數目、及指數偏移量等如表 3.5 所式。
圖 3.2 所示為 lEEE754 的單精確制(即 32 位元)格式,與圖 3.1 不同的地方
是在此圖中多了符號位元(s)一欄(只有 1 個位元)。各種指數與假數的組合意義

61
如表 3.5 所示。

表 3.5 IEEE754 標準格式


在此格式中,指數共有 8 位元,因此其二進制值為 0 到 255,其中 1 到 127
用以表示負的指數-126 到 0,而 128 到 254 則表示正的指數 1 到 127,即使用 127
的偏移量。指數值 0 則保留當做 0 與非標準化數目(denormal)的編碼指示之用。
這裡所謂的非標準化數目是指一個因為它的指數太小而無法以浮點數的標準格
式編入時的數目。

圖 3.2 IEEE754 單精確制格式

62
表 3.6 IEEE754 單精準制格式的指數意義

注意在 lEEE754 單精確制格式中,1.m 的整數 1 實際上並未加以儲存,因此


假數部分的實際有效數字為 24 位元而不是 23 位元。下面各舉一列分別說明如何
將一個實數轉換為 IEEE754 的單精確制格式及如何將一個 lEEE754 的單精確制格
式恢復為實數。

<例 2.19>實數與 IEEE754 單精確制格式的互換

63
<範例說明:浮點數值在記憶體中的儲存>
範例程式 ex3_4.asm:

程式中儲存的資料為 21.375 及 329.5


21.375 轉換為 IEEE754 格式為 41AB000016
329.5 轉換為 IEEE754 格式為 43A4C00016
而實際在記憶體位址儲存時會將 21.375 及 329.5 轉換成 IEEE 浮點格式儲存

<範例說明:浮點數值在記憶體中的儲存>
範例程式 ex3_6.asm:

程式中儲存的資料為 23.55 及-23.55


在這邊 23.55 轉換成 2 進制為 10111.1000110011001100110…(0110 循環)
將 23.55 轉換成 IEEE754 格式應為 01000001101111000110011001100110 0…
因為小數點後第 24 個位元為 0 所以:
23.55 轉換為 IEEE754 格式為 41BC666616
-23.55 轉換為 IEEE754 格式為 C1BC666616
而實際在記憶體位址儲存時會將 23.55 及-23.55 轉換成 IEEE 浮點格式儲存

64
<範例說明:浮點數值在記憶體中的儲存>
範例程式 ex2_5.asm:

程式中儲存的資料為 23.45 及-23.45


在這邊 23.45 轉換成 2 進制為 10111.01110111001100110011…(0011 循環)
將 23.45 轉換成 IEEE754 格式應為 010000011011101110011001100110011…
1 個符號位元+8 個偏移指數位元+23 個小數點後有效位元共 32 個位元
但因小數點後第 24 個位元為 1 所以:
23.45 轉換為 IEEE754 格式為 41BB999A16
-23.45 轉換為 IEEE754 格式為 C1BB999A16

而實際在記憶體位址儲存時會將 23.45 及-23.45 轉換成 IEEE 浮點格式儲存

65
6.2 浮點數的四則運算
浮點數的加法與減法運算遠較定點數複雜,因為這些運算必頇在指數相同時
才可以執行,若欲做加法與減法運算的兩個數目,其指數的大小不相同時,必頇
先調整假數中小數點的位置,使其相等然後再進行運算。乘法與除法運算則較加
法與減法運算簡單,只要將兩個數目的假數分別相乘與相除;指數分別相加與相
減即可。浮點數的基本四則運算規則如下:

若假設 x 與 y 分別為兩個浮點數目而且 x  (1) y  (1) yS my 2 ye


xS
mX 2 x,
e

則加法與減法運算可以分別表示為

x  y  ((1) xs mx 2 xe  ye  (1) ys m y )2 ye

x  y  ((1) xs mx 2 xe  ye  (1) ys my )2 ye
同樣的,乘法與除法運算可以分別表示為

x  y  ((1) xs mx  (1) ys my )2 xe  ye

x  y  ((1) xs mx  (1) ys my )2 xe  ye
在浮點數的四則運算過程中,不首是假數或指數均有可能超出其所用以運算
的精確制範圍,這種情形稱為溢位。為了方便起見,在浮點數的運算過程中的溢
位可以分成下列四種情形:
1. 指數上限溢位(exponent overflow):正的指數超出其最大可以表示的範圍。
2. 指數下限溢位(exponent underflow):負的指數超出其最大可以表示的 範
圍。
3. 假數上限溢位(mantissa overflow):再將兩個相同符號的假數相加時,結果可
能超出最大有效位元(MSB)。
4. 假數下現溢位(mantissa underflow):在假數的標準化過程中,有部分的位元
流出假數的最右端。
假設欲做相加或相減的兩數分別為 x 與 y,則浮點數的加法(x+y→z)與減法
(x-y→z)運算規則如下:
1. 若為減法運算,則改變數目 y 的符號。
2. 數目 x 或 y 為 0,若 x=0,則設定結果 z 為 y;否則,若 y=0,則定結果 z
為 x,並結束。

66
3. 檢查 x 與 y 的指數是否相等,若是則進行步驟 4;否則,調整指數較小的數
目之假數使其指數相等。檢查調整後的假數是否為 0,若是則設定結果為未
調整的數目,並結束。
4. 將假數相加並檢查結果的假數
4.1 若為 0,則設定結果 z 為 0,並結束。
4.2 若產生上限溢位,則右移假數並且調整(增加)指數;若指數產生上
限溢位,則報告此一情況並結束。
4.3 若已經是一個標準化的數目,則在做完捨入程序後結束。
4.4 若不是一個標準化的數目,則左移假數並且調整(減少)指數;若指
數產生下限溢位,則報告此一情況並結束。

<例 2.20>浮點數的加法運算

假設欲做相乘的兩數分別為 x 與 y,則浮點數的乘法(x×y→z)運算規則如下:
1. 數目 x 或 y 為 0,則設定結果 z 為 0,並結束。
2. 將指數相加並減去偏移量,檢查結果的指數是否產生上限或下限溢位,若是
則告知結果為錯誤的數目並且結束。
3. 將假數相乘並將結果的假數標準化與執行捨入程序後結束。
<例 2.21>浮點數的乘法運算

67
假設欲做相除的兩數分別為 x 與 y,則浮點數的除法(x÷y→z)運算規則如下:
1. 若數目 x 為 0,則設定結果 z 為 0;否則,若 y=0,則設定結果 z 為∞,並
結束。
2. 將指數相減並加上偏移量,檢查結果的指數是否產生上限或下限溢位,若是
則告知結果為錯誤的數目並且結束。
3. 將假數相除並將結果的假數標準化與執行捨入程序後結束。
<例 2.22>浮點數的乘法運算

一般為了減小假數下限溢位的發生,電腦內部在做浮點數運算時,通常以較
多的有效位元為之,這些多出的額外位元稱之為保衛位元(guard bit)。
浮點數運算的另外一個問題為在將內部運算後的結果存入預定的精確制格
式過程中,必頇將超出 LSB 的位元捨去的策略。最簡單的方法為直接將超出的位
元捨去而不做任何額外的動作,這一種方法稱為截尾(truncation),其所造成的
誤差較大,但所需的動作較簡單;另一種常用的方法為當額外的位元中之 MSB
為 l 時,則將 1 加於假數的 LSB 上,否則將 0 加於假數的 LSB 上,這種方法稱為
捨入法(rounding),其所造成的誤差較小,但所需的動作較複雜,因為必頇執行
一個額外的加法運算。

68
<補充範例說明:文數碼在不同宣告下的儲存>
範例程式 ex3_7:

以不同的資料型態宣告來儲存程式中的資料
則實際上記憶體位址中儲存的是

69
7. 習題
1. 轉換下列十進制數至十六進制及二進制表示。
(a)23 (b) 23.75
2. 下列十六進制數為 16 位元處理器中具符號整數表示,寫出其表示之十進制
值。
(a)007b (b) ff16
3. 分別求出下列各二進制數目的 2 補數:
(1)(10110011.101) 2 (3)(11101011100011) 2
(2)(10010001.1101011) 2 (4)(11101101110101) 2
4. 使用 2 補數的算數運算分別計算下列各小題(假設 8 位元):
(1)37-(-25) (3)(-34)-21
(2)75+(-75) (4)(-21)-(-34)
5. 轉換下列各數碼為 BCD 碼:

(1)(10110011.101) 2 (3)(1996) 10

(2)(BED) 16 (4)(11101101110101) 2

6. 轉換下列各實數為 IEEE.754 單精確制格式:


(1)1996 (3)234.56
(2)15.59 (4)57.32
7. 轉換下列各 IEEE.754 單精確制格式為實數:

(1)88768ABC 16 (3)F8008ABC 16

(2)78768000 16 (4)C0768980 16

8. 解釋在 2 補數中,進位與溢位兩個名詞的意義有何不同。
9. 使用例題 2.18 的偏移指數系統,計算下列各式:
8 9 8 10
(1)2.876*10 * 1.765*10 (3)5.672*10 * 8.234*10

5 4 4 3
(2)3.456*10 * 4.123*10 (4)1.234*10 * 8.267*10

9. 使用例題 2.18 的偏移指數系統,計算下列各式:


8 9 8 10
(1)2.876*10 / 1.765*10 (3)5.672*10 / 8.234*10

5 4 4 3
(2)3.456*10 / 4.123*10 (4)1.234*10 / 8.267*10

70
10. 對於 16 位元處理器如果數字是具符號(最高位元為符號位元)表示,對於下
列十六進制數字運算其 16 位元結果為何(以十進制的正負號表示)?其結果
是否正確?是否產生進位、借位或溢位?
a. 112316 + 712316 b. 112316 – 712316
c. A12316 + 712316 d. A12316 – 712316

71

You might also like