Professional Documents
Culture Documents
MARIE:
一個簡單計算機的介紹
2
MARIE:一個簡單計算機的介紹
「當你想以使用工具的方式來做事
時,不要讓自己把事情變複雜了。」
—Leonardo da Vinci
4.1 緒論
在本章中我們先來看看一台非常簡單的稱為
MARlE:a Machine Architecture that is Really
Intuitive and Easy 的計算機
接著敘述Intel 與 MIPS 機器,兩個廣受採用且
分別反映出 CISC 與 RISC 設計原理的架構的
簡要概觀
目的是為了讓你瞭解計算機如何發揮功能
中央處理單元 (central
processing unit, CPU) 負
責擷取程式指令、解碼擷取到的指令、並對恰
當的數據執行應該的一序列運作
所有計算機都有一個內含兩部分的CPU:
第一部分是數據通道 (datapath),是以匯流排聯
結而交織在一起的儲存單元 (暫存器) 與算術邏
輯單元 (用於對數據執行各種運算),其間的時
序以時脈訊號控制
第二個部分是負責使運作依序發生並確保恰當
數據在恰當時間會處於恰當位置的控制單元
(control unit)
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
5
4.2.1 暫存器
計算機中的數據處理一般在儲存於暫存器中固
定大小的二進字組上進行
常見的大小有 16、32 與 64 位元
暫存器的數量隨架構而異,不過一般均為2 的
次方並以 16、32 與 64 個最常見
有些暫存器被指定作「特定目的」且只存放數
據、只存放位址或只存放控制資訊;其他暫存
器較通用而可在不同情況下存放數據、位址或
控制資訊
暫存器與記憶體的定址方式不同
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
4.2.2 ALU
7
4.4 時脈
它像是節拍器或交響樂團指揮般決定了系統中
所有事情發生的步調
CPU 執行每一道指令都需要用到特定數量的時
脈變換,因此指令執行時間往往以時脈週期數
(clock cycles) 而非多少秒來表示
大部分的機器是同步的:具有一個主控且以規
律週期滴答運行 (週而復始由 0 變 1 再變回 0)
的時脈訊號
4.4 時脈
能把時脈週期變得多短是有極限的:當時脈變
換、新數據載入暫存器,暫存器的輸出也將更
新;改變後的輸出值必須傳遞經過機器中所有
線路直到它們抵達要被儲存於其中的下一批暫
存器的輸入為止
最小的時脈週期時間一定要至少與從各個暫存
器輸出到暫存器輸入間線路中最大的傳遞延遲
一樣大
如果我們想縮短暫存器間的距離來縮短傳遞延
遲的話,可以在從暫存器輸出到對應的暫存器
輸入這條路徑的中間加入額外的暫存器
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
22
4.4 時脈
通常當我們提到時脈 (clock),意思指的是管控
CPU 與其他組件的系統時脈 (system clock) 或
主控時脈
匯流排時脈 (bus clock) 通常較 CPU 時脈緩慢
4.6 記憶體組織與定址
記憶體可視為位元所組成的矩陣
每一列如同一個暫存器,其長度一般就代表機
器中可定址單元的大小
• 通常記憶體是以位元組為可定址單位 (稱byte
addressable),表示每一個位元組都有一個位址
每一個暫存器 (更常被稱為一個記憶體位置,
momory location) 有特定的位址;記憶體位址通
常以無號整數由 0 開始往上排列
圖4.4
• 當一個字組內含多個位元組時,最低位址的位元
組決定了整個字組的位址
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
26
圖 4.4
4.6 記憶體組織與定址
如果架構是位元組定址而指令集架構中字組大
於一個位元組,則必須考慮對齊 (alignment)
確認 (1) 字組儲存於自然的對齊邊界上與
(2) 存取是從該邊界開始
有些架構允許某些指令執行非對齊的存取
4.6 記憶體組織與定址
要對這個記憶體 (設為以位元組定址) 定址,則
需能夠個別指出 222 個項次
• 需要以二進數字從 0 數到(222 − 1);這需要多少個
位元?
• 通常當計算機的記憶體含有 2N 個可定址的單元,
則需N 個位元來唯一地定址每個單元
4.6 記憶體組織與定址
RAM 晶片,
主記憶體的大小一般會大於單一
因此多個這種晶片會被組成所需容量的一個整
體記憶體
例如,所需的是32K × 8
以位元組定址的記憶體
而手上的 RAM 晶片是
2K × 8 的,則可以將 16
個這種晶片成列連接如
圖 4.5 所示
4.6 記憶體組織與定址
• 記憶體的位址需有 15 個位元,但每一晶片僅需11
條位址線
▪ 以解碼器來解碼位址中或是最左或是最右 (按:或
是任意) 的 4 個位元來判斷含有該位址的晶片
▪ 選用了哪 4 個位元來解碼以選擇晶片決定了記憶體
中的位址如何交錯 (interleaved,或稱穿插)
記憶體交錯 (memory
interleaving) 中記憶體內
含多個記憶體模組 (或稱排,banks),此時各模
組可同時作存取,有助提高整體存取速度
排的數量與可定址項次的數量有關,而無關乎
每個項次的大小
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
31
4.6 記憶體組織與定址
若為低序交錯 (loworder interleaved),則會以位
址中的低序位元選擇所欲的排;若為高序交錯
(high-order interleaved),則使用位址中的高序位
元
• 高序交錯是最直覺的方式,分派位址的方式是使
模組內包含的位元組其位址均連續
• 低序交錯記憶體將連續的記憶體位置置於不同記
憶體模組中
範例 4.1
4.6 記憶體組織與定址
雖然低序交錯容許循序的記憶體位置(例如擺
放陣列或程式中的指令時)被同時存取,高序交
錯的方式似更自然。因此本書之後均假設採用
高序交錯
4.7 插斷
有關這些組件如何與處理器互動的觀念:插斷
(interrupts) 是會改變 (或插入、攪亂) 系統中正
常執行流程的那些事件
插斷可被各種原因觸發,包括:
• I/O 請求 • 頁錯誤 (將於第六章中
• 算術錯誤 (例如除以0) 詳述)
• 算術滿溢或短值 • 無效指令(往往肇因於
• 硬體錯動作 (例如記憶 指標事件)
體同位錯誤) • 其他原因
• 使用者定義的斷點 (例
如在做程式除錯時)
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
35
4.7 插斷
對每一種插斷採取的應對 (稱為插斷處理,
interrupt handling) 相當歧異
插斷
可以由使用者或系統來發起
可以是可被遮蓋 (maskable) (禁止或忽略之) 或不
可被遮蓋 (nonmaskable) (具高權限因而不可被禁
止並且一定要回應的插斷) 的
可在指令執行過程中或與指令的執行無關的
可以是同步 (每次發生都是在程式執行到相同的
地方時) 或非同步的 (無法預期其發生者)
在插斷處理完成後可造成程式結束或繼續執行者
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
36
4.8 MARIE
具有實用計算機所應具備的所有功能組件
4.8.1 架構
圖4.8 表示MARIE 的架構
以二進制運作,數值採二的補數表示法
內儲程式,固定的字組長度
以字組 (非位元組)為定址的對象
主記憶體有4K個字組的空間 (這表示位址中需要
12 個位元)
16 位元長的數據 (字組長度為16)
16 個位元的指令:4 個位元表示運作碼及12 個
位元表示位址
一個16 位元的累加 (暫存) 器 (AC)
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
38
4.8.1 架構
一個16 位元的指令暫存器 (IR)
一個16 位元的記憶體緩衝暫存器 (MBR)
一個12 位元的程式計數器 (PC)
一個12 位元的記憶體位址暫存器 (MAR)
一個8 位元的輸入暫存器
一個8 位元的輸出暫存器
4.8.2 暫存器與匯流排
MARIE 中共有 7 個暫存器,說明如下:
AC:累加器 (accumulator),存放數值。屬通用
型暫存器 (general-purpose register),存放的是
CPU 需處理的數據。現在的計算機大部分都已
經有許多個通用型暫存器 (按:也因此多以編號
R0、R1、R2 來稱呼了)
MAR:記憶體位址暫存器 (memory address
register),存放所要存取位置的記憶體位址
MBR:記憶體緩衝暫存器 (memory buffer
register),存放才從記憶體讀入、或正要寫出至
記憶體的數據
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
41
4.8.2 暫存器與匯流排
PC:程式計數器 (program counter),存放程式
中下一道要被執行的指令的位址
IR:指令暫存器 (instruction register),存放下一
道要被執行的指令
InREG:輸入暫存器 (input register),存放由輸
入設備傳來的數據
OutREG:輸出暫存器 (out register),存放要傳
給輸出設備的數據
4.8.2 暫存器與匯流排
MAR、MBR、PC
與 IR 存放非常特定的資訊
並且不能用作任何上述以外的用途,例如不可
以將從記憶體取得的一個任意數值放入PC
要存放任意的數值就一定要用 MBR 或 AC
還有一個存放能指出 ALU 發生了滿溢、算術
或邏輯運算的結果是否為 0、計算中是否產生
了進位,以及結果是否為負值等資訊的狀態
(status) 或稱旗標暫存器 (flag register)
為了清晰起見,各圖中將不會顯示這個暫存器
4.8.2 暫存器與匯流排
MARIE
中使用的是共用匯流排的方式。每個
連接到匯流排的設備都需要有一個編號
還有一些能使執行更快速的通道:
一條通訊路徑位於 MAR 與記憶體間
一條聯結了 MBR 與 AC
一條從 MBR 拉到 ALU 來容許 MBR 中的數據
能直接用於算術運算
一對可以由 AC 經過 ALU 再回到 AC 中
4.8.3 指令集架構
機器的指令集架構 (instruction
set architecture,
ISA) 指出計算機能執行的指令與每一道指令的
格式
ISA 實質上是軟體與硬體間的介面
MARIE 中每道指令的長度均為 16 位元
最高位的 4 個位元,位元 12 至 15,組成說明指
令運作內容的運作碼 (opcode) (因此共可有16 道
指令)
MARIE 的指令格式示於圖 4.10 中
4.8.3 指令集架構
ISAs 中的指令可分為處理數據、移動
大部分
數據與控制程式執行順序等三類
MARIE 指令集中的指令示於表 4.2 中
4.8.3 指令集架構
• Load 指令不需指出 AC 是其最終存放數據處;該
暫存器在該指令中是隱喻的
• 其他指令也以類似方式使用 AC 暫存器
• 輸入與輸出是相對繁複的動作
▪ 目前的計算機中輸出入以ASCII 形式進行
• 既然所有輸入與輸出都是以 ASCII 為之,計算機
如何知道應該視某個 I/O 值為數值或 ASCII?
▪ 答案是計算機依據使用該數值當時的環境即可得知
• 在 MARIE 中我們假設輸出入均為數字
• Halt 指令使程式的執行終止
4.8.3 指令集架構
• Skipcond 指令執行條件分支 (conditional branching)
▪ 需要檢視 AC 中的值:指令利用兩個位址位元 (設
使用兩個最靠近運作碼欄位的位址位元,位元10 與
11) 來指出測試的條件
• Jump 指令是非條件式分支 (unconditional branch),
也會改動 PC
4.8.3 指令集架構
你會喜歡用命令 Load、Add 與 Halt,還是它們
的二進形式 0001、0011 與 0111,來寫程式呢?
希望使用指令的名稱或助憶詞 (mnemonic)
二進形式的指令稱為機器指令 (machine
instructions)
助憶詞指令是組合語言指令 (assembly language
instructions)
組合語言指令與機器指令間具有一對一的關係
(按:上述敘述並不正確;一般的組譯器允許一
道組合語言指令可以對應至 0 至多道機器指令)
4.8.4 暫存器傳遞表示法
每一指令看似非常簡單;然而若你檢視在組件
層級中真正發生什麼事,每一指令都包含許多
運作
有很多「小型指令」被執行了
這些小型指令稱為微運作 (microoperations) 並界
定可執行於暫存器中數據上的基本運作
(elementary operations)
用以描述這些微運作行為的符號表示法稱為暫
存器傳遞表示法 (register transfer notation, RTN)
或暫存器傳遞語言 (register transfer language,
RTL)
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
51
4.8.4 暫存器傳遞表示法
Load X
MAR ← X
MBR ← M[MAR]
AC ← MBR
Store X
MAR ← X, MBR ← AC
M[MAR] ← MBR
4.8.4 暫存器傳遞表示法
Add X
MAR ← X
MBR ← M[MAR]
AC ← AC + MBR
Subt X
MAR ← X
MBR ← M[MAR]
AC ← AC – MBR
4.8.4 暫存器傳遞表示法
Input
AC ← InREG
Output
OutREG ← AC
Halt
不會對暫存器作動作
4.8.4 暫存器傳遞表示法
Skipcond
If IR[11-10] = 00 then {若IR 中的位元10 與11 均為0}
If AC < 0 then PC ← PC + 1
else If IR[11-10] = 01 then { 若IR 中的位元11 = 0 且10 = 1}
If AC = 0 then PC ← PC + 1
else If IR[11-10] = 10 then {若IR 中的位元11 = 1 且10 = 0}
If AC > 0 then PC ← PC + 1
Jump X
PC ← X
4.9 指令的處理
插斷與指令週期
MARIE 的 I/O
4.9.2 插斷與指令週期
插斷理由包括
程式出錯 (如除以 0、算術滿溢、堆疊滿溢或試
圖存取記憶體中受保護的區域)
硬體出錯 (包括記憶體同位錯誤或供電異常)
I/O 完成 (發生於請求讀取磁碟與數據傳輸完成時)
使用者插斷 (如按 Ctrl-C 或 Ctrl-Break 來停止程式)
由作業系統設定的計時器發出的中斷 (如配置虛
擬記憶體或執行某些簿記功能時所需做的)
共通點:它們插斷常態的擷取- 解碼- 執行週期,
指示計算機停止其手上的工作並轉而做別的事
4.9.2 插斷與指令週期
計算機處理插斷的速度對決定計算機的整體效
能具關鍵角色
硬體插斷 (hardware interrupts) 可由系統中包括
記憶體、硬碟、鍵盤、滑鼠甚至數據機等周邊
設備產生
• 插斷的好處就在於它們不需要 CPU 持續檢視這些
設備,僅在有需求時由設備或事件主動告知 CPU
各種軟體應用程式中也採用軟體插斷 (software
interrupts),亦稱設陷阱捕捉 (traps) 或例外 (處理)
(exceptions)
4.9.2 插斷與指令週期
計算機以插斷處理器 (interrupt handlers 或可稱
插斷處理程序)支援軟體與硬體插斷二者
各種插斷連同相關的插斷服務程序 (interrupt
service routines, ISRs) 的相關資訊都儲存於插斷
向量表 (interrupt vector table) 中
4.9.2 插斷與指令週期
CPU每完成一道指令即在擷取-解碼- 執行週期
開始時檢視是否有插斷需求發生,如圖4.12 中
所示
一旦CPU 回應一個插斷,則需立刻處理之
4.9.2 插斷與指令週期
上圖中「處理插斷」方
塊的細節說明於圖 4.13
中
4.9.2 插斷與指令週期
對非重大的插斷可利用位於旗標暫存器中的一
個遮蓋插斷位元來表示暫不偵測對應的插斷要
求
此稱之為插斷遮蓋 (interrupt masking),而可被
遮蓋的插斷則稱為可遮蓋的 (maskable) 插斷
不可遮蓋 (nonmaskable) 的插斷不可以被遮擋
組合語言提供特定指令來處理硬體與軟體插斷
最常見的工作之一就是以軟體插斷處理 I/O
4.10 簡單的程式
(位於主記憶體中的)數字相加,之
程式將兩個
後儲存和於記憶體中 (暫時不理會I/O)
表4.3 列出這樣的組合語言程式與對應的機器語
言程式
4.10 簡單的程式
程式結束時,位置 0x106 的內容成為
0000000000001100,亦即十六進 000C
圖4.14 表示程式執行過程中各暫存器的值
圖4.14 將二個數字相加的程式執行的過程
圖4.14 將二個數字相加的程式執行的過程
組譯器做什麼?
為何使用組合語言?
4.11.1 組譯器做什麼?
組譯器的工作是將 (使用助憶詞的) 組合語言程
式轉換成 (全部包含二進數字或長串的 0 與 1
的) 機器語言程式
組譯器讀入來源檔 (source code) 並產出目的檔
(object file) (即機器碼,machine code)
來源檔能以標籤 (label)
(一些簡單的名稱) 來辨
識或稱呼特定的記憶體
位址,以使組合語言編
程更容易
• 表 4.4 說明這個觀念
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
73
4.11.1 組譯器做什麼?
組譯器一般會規定組合指令的格式規則,包括
如何使用標籤
• MARIE 規定標籤之後必須接一逗點
組譯器要將程式從開頭到結尾閱讀兩次:
• 在第一次過程中組譯器建立稱為符號表 (symbol
table) 的一組對應關係
• 在第二次閱讀程式時「填入空白的格子」
▪ 符號表:
4.11.1 組譯器做什麼?
▪ 轉譯出來的指令可能還不完整,如下所示:
• 在第二回合的轉譯時,組譯器根據符號表填入位
址來得出對應的機器語言指令
▪
4.11.1 組譯器做什麼?
一般可使用某類組譯器指令 (assembler directive,
專門對組譯器下達而且不應被譯成機器碼的指
令) 告知組譯器以何種基底顯示數值
• 在 MARIE 組合語言
中,我們以 DEC 代
表十進形式而 HEX
代表十六進
▪ 表4.5
4.11.1 組譯器做什麼?
註解分界符號 (comment delimiter) 是用以告知組
譯器 (或編譯器) 應忽略該行中任何在其之後的
文字的特殊字元符號
• MARIE 中的註解分界符號是向前的斜撇 (「/」)
4.11.2 為何使用組合語言?
瞭解如何以組合語言編程非常有助於瞭解架構
(反之亦然)
組合語言編程在許多其他情況亦會顯得有用
偶爾程式師一定要繞過一些存在高階語言中的
限制而直接使用組合碼,以使程式在執行時間
(與空間) 上更有效率
• 程式大部分以高階語言撰寫,另有部分以組合語
言重寫,使程式師得以善用兩種編程方式分別具
有的優勢
4.11.2 為何使用組合語言?
如果程式整體大小或反應時間很關鍵,整個程
式都應該以組合語言編程
• 組合語言對程式師在高階語言欠缺某些指令或能
力的情形下可能真有其必要
• 一個有關反應時間與有限空間設計的完美範例可
見於嵌入式系統 (embedded systems) 中
▪ 嵌入式系統使用的軟體非常關鍵,一定要在非常特
定的反應參數下工作並且只能耗用有限儲存空間
4.12 擴充我們的指令集
4 個位元,表示我們可以有 16 個
運作碼占了
不同指令,而目前只用到 9 個
挑選出來的新指令整理於表4.6 中
4.12 擴充我們的指令集
JnS (跳躍並儲存,jump-and-store) 指令可讓我們
呼叫程序或副程式,並於程序/副程式結束之
後返回呼叫點
Clear (清除) 指令將累加器中的位元全清為 0
AddI、JumpI、LoadI 與 StoreI 這些指令帶出了
另一個定址模式 (addressing mode)
• 間接定址模式 (indirect addressing mode)
4.12 擴充我們的指令集
六道新指令的暫存器傳遞表示法:
4.12 擴充我們的指令集
表4.7 整理出MARIE 完整的指令集
範例4.2 這是一個以迴圈將五個數字相加的範例:
倍增
注意:程式中的行編號僅用作參考,並
不會用於MarieSim 的環境中。
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
88
4.13 解碼的討論:硬連線相對於微程式控制
控制單元實際如何運作?這些控制線是如何設
定的?
以處理器時脈驅動的控制單元負責解碼指令暫
存器中二進形式的內容並產生所有必要的控制
訊號
控制單元對程式中每一道指令都會以一連串
「控制」步驟導引CPU 執行
• 每一控制步驟會使控制單元再產生啟動適切微運
作 (稱為控制字組,control word) 的下一組訊號
4.13 解碼的討論:硬連線相對於微程式控制
有兩種方法可用來設定各控制線
1. 硬連線控制 (hardwired control)直接將真正的機
器指令 (經由邏輯電路來) 產生各種控制訊號
• 指令中分成許多欄位,各欄位中的位元則接到驅
動各種數位邏輯組件的各輸入線
2. 微程式控制 (microprogrammed control) 使用包含
許多能執行指令中微運作的微指令的軟體
4.13.1 機器控制
暫存器傳遞語言描述的各項微運作其實就定義
了控制單元的動作
為了方便之後舉例,我們定義兩組訊號:能允
許從記憶體或一個暫存器讀取的P2、P1、P0,
與能允許寫入一個暫存器或記憶體的P5、P4、
P3
詳細表示 MARIE MBR (其位址是3) 如
圖4.15
何連接至數據通道
使用三態 (tri-state) 元件即可避免暫存器同時
「搶著用」匯流排
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
91
4.13.1 機器控制
若 P1 與P0 為 high,則AND 閘輸出 P2′ P1P0,當
要選取 MBR 來讀取時就會輸出一個 1 (表示
MBR 會將內容寫至匯流排上,或稱寫至 D15 -
D0)
• 此時任何其他暫存器都因它們的三態元件收到解
碼器 AND 閘的 0 形成斷路而不能聯上匯流排
• 寫入 MBR 的方式亦同
4.13.1 機器控制
ALU
只有三種動作:加、減與清除。顧慮到指
令不牽涉 ALU 的情形,因此需要定義 ALU 的
第四種情況「什麼都不做」
可以僅用二控制訊號 A0 與 A1
表4.8
4.13.1 機器控制
計算機中的時脈以在恰當時間送出恰當訊號的
方式引導一序列微運作工作
MARIE 指令需要用到的時脈數不盡相同
• 方法是將時脈接到一個同步的計數器上去,然後
計數器的輸出接到解碼器中
• 若指令僅需較少的時脈週期數,可在週期數足夠
時以計數器重置訊號 Cr 來重置計數器
4.13.1 機器控制
可以用如同圖3.31 中的計數器來作為 PC;也
要能夠直接將值存入 PC (例如在執行Jump 指
令時)
AC不但能由匯流排讀取數值,也能由 ALU 獲
得數值。MBR 也有類似的另一個數據來源
圖4.15 中可以加上多工器,並以LALT 控制線選
擇暫存器要載入的數據是哪一個
4.13.1 機器控制
在RTN
中加上訊號的樣式來表示各項動作需以
前述方式設定相關訊號:
注意:我們是在時脈週期 T3 開始這些動作,因
為擷取已經使用了 T0、T1 與 T2 (來複製PC 值進
MAR、複製記憶體中指定位置的值入IR 以及遞
增 PC值)
圖4.16 以圖示說明前述相關的訊號樣式順序:
4.13.1 機器控制
• 在時脈週期 C3 中,除了P0、
P1、P2、P3 與T3 外,其他控
制訊號均為低
▪ 設定 P0、P1、P2 使 IR 可被讀
取,設定 P3 則使MAR 可被寫
入
▪ 這些動作仍需配合已設定的 T3
才能發生
4.13.2 硬連線控制
硬連線控制將指令暫存器中的位元直接透過基
本邏輯閘轉換為控制訊號
硬連線控制單元需具備三個部分:指令解碼器、
週期計數器與控制矩陣
根據系統的複雜性不同,可能還會增加各種特
殊暫存器與狀態旗標
圖4.17 表示一個簡化的控制單元
圖4.17 硬連線形式的控制單元
4.13.2 硬連線控制
0
• 指令解碼器
(instruction
decoder) 將輸出
線中對應於指
令暫存器中運
作碼的那一組
特定的訊號線
拉高
▪ MARIE 指令集
所使用的部分
解碼器示於圖
4.18 中
4.13.2 硬連線控制
• 週期計數器 (cycle counter) 隨著系統時脈的變換產
生許多各不相同的時間訊號 T0、T1、T2、⋯、Tn
▪ 指令集中所有指令需要用到的最大微運作數量決定
這些不同時間訊號的數量 (亦即 Tn 中的 n 值)
▪ 圖4.19 表示環式計數其中一種作法
4.13.2 硬連線控制
• 來自計數器以及指令解碼器中的訊號會在控制矩
陣 (control matrix) 中共同產出一系列的訊號
▪ 造成牽涉 ALU、暫存器以及數據通道的微運作能夠
一路執行下去
Add 指令的硬連線邏輯示於圖 4.20中
圖中可看到每一個時脈週期如何與指令中的位
元 AND 在一起來產生恰當的訊號
• 每當時脈變換,不同的一群組合邏輯電路就會動
作
4.13.2 硬連線控制
4
硬連線控制的優勢是速度,劣勢是指令集與控
制邏輯直接經由難以設計與更改的複雜電路結
合在一起
想要擴充指令集 (如之前對MARlE 所做的),則
計算機中的一些硬體部件必需作更動
這樣做成本太高,因為不但需產製新晶片,而
且需找到原有晶片的位置來更換
4.13.3 微程式控制
5
控制訊號產生的方式
就是據以分辨硬連線
控制與微程式控制的
因素
在微程式控制中,
是用指令的微碼
(microcode) 產出必
需的控制訊號
通則性的微程式控
制單元方塊圖示於
圖4.21 中
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
10
4.13.3 微程式控制
6
所有機器指令都是作為一個特殊的可將機器指
令轉換為一序列控制訊號的程式—微程式
(microprogram)—的輸入
微程式本質上是一個以微碼寫成且存放在通常
稱為控制儲存區 (control store) 的韌體 (ROM、
PROM 或EPROM)中的解譯器
每一時脈週期會有一道微碼中的微指令被讀取;
哪一道 (微)指令會被讀取則取決於當時的機器
狀態以及一個像程式計數器般能指出控制儲存
區中下一道 (微)指令的微循序器 (microsequencer)
的值
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
107
4.13.3 微程式控制
如果 MARIE 是微程式控制的,則其微指令的格
式可能如圖4.22 中所示
4.13.3 微程式控制
8
• 每一個微運作對應於一組特定的控制線是否會致
動電路
• 完整的 (如表4.7 中所示的) RTN 以及在擷取- 解碼
- 執行週期中的 RTN 顯示一共只用到 22 個不同
的微運作就足以實作出 MARIE 的整套指令集
▪ 不過還需要另外兩個微運作。第一個是 NOP,表示
「沒有動作」。NOP 在系統必須等訊號穩定下來、
等數據從記憶體中讀取回來,或不需做事而只填補
空缺時可派上用場
▪ 第二個也是最重要的是,我們需要能比對指令暫存
器中前 4 個位元 (IR[15-12]) 與 MicroOp2 中前4 個位
元的微運作
4.13.3 微程式控制
9
MARIE 的每一道微運作都被指定一個二元碼,
如表4.9 所示
4.13.3 微程式控制
MARIE
的整個微程式包含不到 128 個敘述句,
因此七個位元即足以區別它們
MARIE 的控制儲存區記憶體內含有以連續位址
存放的完整微程式
該程式中有一跳躍表以及對應 MARIE 每一運作
的一個區塊的碼
圖4.23
4.13.3 微程式控制
• 當MARIE 初始啟動時,硬體會將微循序器設為指
向微程式的位址 0000000,運作亦即從這個進入
點開始
• 從位址 0000100 開始的包含各個「if」的敘述句
是存放那些實現各機器指令的一組組敘述句位址
的跳躍表的地方
▪ 這些「if」敘述句以分支到能設定控制訊號來實現
機器指令的碼區塊的方式來「解碼」指令
4.13.3 微程式控制
微程式控制通常較硬連線控制緩慢的原因—所
有指令在執行時需經過又一層的解譯
不過效能並非一切;微程式具有彈性,設計上
又簡單,因此很適用於強大 (按:應說是複雜)
的指令集
• 如果需要修改指令集,則僅需更動微程式來配合:
不必改動到硬體
4.14 計算機架構的實際範例
為了允許參數傳遞,MARIE
需要有一個僅能
由序列的其中一端存取內容且稱為堆疊 (stack)
的資料結構
堆疊是一種後進先出 (last-in-firstout) 的結構
可以利用主記憶體的一些位置來模擬出堆疊
• 推入 (pushing,加入) 至堆疊上以及爆出 (popping,
移出) 堆疊均僅能在開口端為之
• 堆疊指標 (stack pointer) 用於追蹤數據要被推入或
爆出的位置
4.14 計算機架構的實際範例
介紹兩個現代化的計算機架構:Intel 架構 (x86
與 Pentium 家族)、MIPS 架構
Intel 架構的 x86 家族中每一成員都是習稱 CISC
(complex instruction set computer,複雜指令集計
算機) 的機器
Pentium 家族與 MIPS 架構卻是歸屬於 RISC
(reduced instruction set computer,精簡指令集計
算機) 的機器
CISC 機器有很多指令,指令的長度不固定,格
式也很複雜,其中會有不少指令相當複雜,一
道指令執行起來就會牽涉多項運作
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
116
4.14 計算機架構的實際範例
• 基本的缺憾在於少許複雜的 CISC 指令就可能足
以大大拖累系統的速度
RISC 機器的主要目的是簡化指令使它們能執行
得更快速
• 每一道指令只執行一個運作,指令長度都一樣,
只使用少數的格式,以及所有算術運算都只能使
用暫存器中的數據 (記憶體中的數據則不可在此
作為運算元)
▪ 較不複雜的架構採用少量 (但已完整) 的指令集並以
硬連線的方式使之能極快速執行
▪ 編譯器有責任 (按:也更易於) 產生這種 ISA 的高效
率程式碼
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
117
4.14.1 Intel 架構
8086 於1979 年面世並受 IBM PC 採用
處理16 位元的數據並具有 20 位元的位址
8086 的近親,8 位元的 8088,也用於許多個人
電腦中來降低成本
8086CPU 分成兩個部分:包含一般暫存器與
ALU 的執行單元 (execution unit),以及包含指
令貯列、區段暫存器與指令指標的匯流排介面
單元 (bus interface unit)
具有四個稱為 AX (為主要的累加器)、BX (用於
擴充定址能力的基底暫存器)、CX (計數暫存器)
與 DX (數據暫存器)的暫存器
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
118
4.14.1 Intel 架構
• 每一個暫存器又分為兩部分:最重要的部分稱為
「高位」部分 (標記為 AH、BH、CH 與 DH),而
最不重要的部分稱為「低位」部分 (標記為 AL、
BL、CL 與 DL)
也具有三個指標暫存器:用於表示堆疊中位移
量的堆疊指標 (SP);用於存取推入堆疊中的參
數的基底指標 (BP);與存放下一道指令的位址
(類似MARIE 的PC) 的指令指標 (IP)
還有兩個索引暫存器:作為串列運作中的來源
指標的 SI (source index,來源索引) 暫存器,與
作為串列運作中的目的地指標的 DI (destination
index,目的地索引) 暫存器
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
119
4.14.1 Intel 架構
還有一個狀態旗標暫存器 (status flags register),
暫存器中各個位元表示各種如滿溢、同位、進
位觸發的插斷等等的狀態
8086 組合語言程式可劃分成不同的區段
(segments),各區段都是存放特定形態資訊的特
別區域
碼區段 (存放程式用)
數據區段 (存放程式的數據用)
堆疊區段 (存放程式的堆疊用)
4.14.1 Intel 架構
要從任何一個這些區段中存取資訊都必須指定
該項目從相關區段的開頭算起的位移量,因此
也需要有這些區段指標:
• 碼區段 (CS) 暫存器、數據區段 (DS) 暫存器與堆
疊區段 (SS) 暫存器
• 還有第四個稱為額外區段(ES) 暫存器,某些串列
運作用以處理記憶體定址的區段暫存器
• 位址以使用區段/位移,以 xxx:yyy 形式呈現的
定址方式定義,其中 xxx 是區段暫存器中的值而
yyy 是位移值
4.14.1 Intel 架構
1980
年Intel 推出在 8086 機器指令集中加入浮
點指令以及一個 80 位元寬的堆疊的 8087
1982 年 (可定址 16 百萬個位元組) 的 80286
1985 年 (可定址 4 個十億位元組的記憶體) 的
80386
80386 是 32 位元的晶片,也是一般稱為 IA-32
(代表 Intel Architecture,32 位元) 這個家族中的
第一個晶片
能夠向後相容 (backward compatible)
4.14.1 Intel 架構
從 16 位元變成 32 位元的 80386 對暫存器的命
名規則是在名稱前加上前置的「E」( 表示
「extended」)
原來的 AX、BX、CX 與 DX 變成了 EAX、
EBX、ECX 與 EDX。同樣的規則也用於所有其
他暫存器上
• 圖4.24 以 AX 暫存器為例說明各種存取的方法
4.14.1 Intel 架構
80486 增加了一個可大大提升效能的高速快取
(cache) 記憶體
Pentium
系列始自於擁有 32 位元暫存器與 64
位元數據匯流排並採用超純量 (superscalar) 設
計的Pentium 處理器
超純量表示CPU 具有多個ALUs 並能在一個時
脈週期中派發出多於一道指令
Pentium Pro 加上了分支預測
Pentium
II 再加上 MMX 技術 (大部分人應同意
它並非極為成功)來處理多媒體
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
124
4.14.1 Intel 架構
Pentium
III 加入更多 (採用浮點指令的)對 3D
圖像的支援
Intel 也已配合著潮流漸漸從 CISC 而向 RISC
靠攏
Intel
CPUs 家族的第七代稱為 Intel Pentium IV
(亦稱 Pentium 4)
這個處理器與它的前身各代在幾個方面有所不
同:
• 超管道化 (hyperpipeliming),是更寬的指令管道以
求同時處理更多指令
4.14.1 Intel 架構
• 快速的執行引擎
• 執行軌跡快取,是儲存解碼過的指令以求下次再
用到時不必再對其解碼的快取
• 400MHz 的匯流排
Pentium IV 處理器也推出超多緒處理
(hyperthreading, HT)
• 緒 (threads) 是一個程序的環境中可各自獨立執行
的工作
• 緒與其父程序共用碼與數據,然亦有其自有的資
源,包括一個堆疊與一個指令指標
• Intel 的 HT 能夠將單一處理器模擬成兩個邏輯上
(或虛擬) 的處理器
計算機組織與結構 【 第四章 】 MARIE:一個簡單計算機的介紹
126
4.14.1 Intel 架構
名稱的意義?
Intel 在推出它的 Pentium 處理器前,詢問了美
國專利商標局是否可將「586」這個名稱註冊為
商標?
• 在美國,數字不能作為商標
• Intel 的商標申請被拒絕,因此更改名稱為
Pentium
4.14.1 Intel 架構
在 2001 年 Itanium 的推出開始了Intel 的第一個
64 位元晶片(IA-64)
Itanium 使用以暫存器為基礎的程式語言並有非
常豐富的指令集
它也採用硬體模仿器來保持對 IA-32/x86 指令集
的向後相容性
具有四個不同層次的快取記憶體
4.14.1 Intel 架構
Intel 也在 2006 年公布它廣受歡迎的「core」微
架構
要比較 MARIE 與 Intel 兩種架構,可以先回顧
範例4.2 中MARIE 以迴圈加總五個數字的程式
將該程式以 x86 組合語言重寫之則如範例4.6 中
所示。注意新加入了 Data 區段的指令與 Code
區段的指令
圈加總五個數字的程式
圈加總五個數字的程式
4.14.2 MIPS 架構
MIPS
家族的CPU 已是它所屬類別中最成功與
具彈性者之一
MIPS R3000、R4000、R5000、R8000 與
R10000
MIPS 的晶片除了計算機 (例如Silicon Graphics
機器) 與各種用到計算機的玩具 (Nintendo 與
Sony 在許多它們的產品中使用MIPS CPU) 外,
主要用於嵌入式系統中
4.14.2 MIPS 架構
MIPS ISA 是 MIPS I 以至 MIPS V
目前的 ISAs 統稱 MIPS32 (意為32 位元架構) 與
MIPS64 (意為64 位元架構)
MIPS 屬載入/儲存式架構 (load/store
architecture)
MIPS32架構中的 CPU 具有 32 個32 位元、編
號由 r0 至 r31 的通用暫存器
其中兩個具有特殊功用:r0 接線成其值為0,而
r31 是某些指令預設會使用到的暫存器,表示指
令中不須特別指名它
4.14.2 MIPS 架構
其中兩個具有特殊功用:r0 接線成其值為0,而
r31 是某些指令預設會使用到的暫存器,表示指
令中不須特別指名它
暫存器標示為 $0、$1、...、$31
• 暫存器 1 被保留作特別用途
• 暫存器 26 與27 由作業系統的核心使用
• 暫存器28、29 與30 是指標暫存器
• 其餘的暫存器可使用其編號來指名,或參考表
4.10 中它們命名的方式
4.14.2 MIPS 架構
• 另有兩個特殊用
途暫存器 HI 與
LO 用來存放某
些整數運作的結
果。當然也會有
一個 PC 暫存器,
因此共有三個特
殊用途暫存器
4.14.2 MIPS 架構
以MIPS32 組合語言撰寫範例4.2 與4.6 的程式
來作比較
4.14.2 MIPS 架構
6
4.14.2 MIPS 架構
MIPS 組譯器與執行過程模擬器 (MIPS
Assembler and Runtime Simulator, MARS) 是
Kenneth Vollmar 與 Pete Sanderson 特別為學士
班教育設計、以Java 撰寫的 MIPS R2000 與
R3000 模擬器
SPIM 是另一個廣受學生以及專業人士採用的
MIPS 模擬器
4.14.2 MIPS 架構
8
檢視範例4.2、4.6 與4.7,可看出指令都相當類
似
有些組合語言有較大的指令集,讓程式師在撰
寫各種演算法時有更多變化
不過並非一定要有大的指令集才完成得了工作
本章總結
9
本章總結
0
插斷在擷取-解碼-執行週期的開頭處被處理,
並於插斷處理程序處理完成後回到正常的擷取-
解碼-執行狀態
介紹組合語言是想要讓你更清楚瞭解機器架構
與指令和架構如何互相關聯
使你具有在高階的C++、Java 或Ada 程式背後到
底事情是如何發生的基本瞭解
本章總結
基於兩個原因我們介紹了 Intel 與 MIPS 的組合
語言與架構
第一,比較各種架構是有趣的
第二,雖然 Intel 與 MIPS的組合語言看起來和
MARIE 的組合語言不同,它們其實非常類似