当前位置:文档之家› 深入研究指令集架构.

深入研究指令集架构.

第五章
深入研究指令集架構
第五章 教學目的
• 了解指令集架構設計的相關問題. • 熟悉記憶體定址模式. • 了解指令層級的管線化概念, 以及它對執 行效能的影響.
2
5.1 介
• 本章的概念是架構在第四章之上的. • 我們深入來介紹不同的指令格式, 運 算元類型, 以及記憶體存取方法. • 我們將會看到機器組織和指令格式間 的相互關係. • 這讓我們能更深入通盤了解電腦架構
10
5.2 指令格式
• 在堆疊架構中, 指令和運算元都是由堆疊取出的.
– 堆疊無法隨機存取.
• 在累加器架構中, 二元運算中的其中一個運算元是在 累加器中.
– 一個是在記憶體, 提高了匯流排的流量.
• 在通用暫存器架構中 (GPR), 可以用暫存器代替記 憶體.
– 比累加器架構快. – 對編譯器製作上來說比較有效率. – 會造成指令比較長.
11
5.2 指令格式
• 現在很多系統都是 GPR系統.
• 有三種類型:
– 記憶體-記憶體, 可能有二或三個運算元在記 憶體中. – 暫存器-記憶體, 至少有一個運算元在暫存器中 . – 載入-儲存, 沒有運算元是在記憶體的.
• 運算元的數目和可用的暫存器數目對指令的 長度有直接的影響.
12
5.2 指令格式
6
5.2 指令格式
• Byte 順序, 或是 endianness, 是架構上的另 一種考量. • 如果我們有一個 two-byte的整數, 那這個整 數的儲存可能是低權重byte接著高權重 byte, 或是相反.
– 在 little endian 機器中, 低權重byte後是高權重 byte. – Big endian 機器則是將高權重襬在低位址.
3
5.2 指令格式
指令是由下列各項來進行區別的:
• 每個指令的位元個數. • Stack-based 或 register-based.
• 每個指令所能表示的運算元個數.
• 運算元的位置.
• 運算的類型.
• 運算元的類型和大小.
4
5.2 指令格式
指令集架構是依據下列來衡量好壞:
• 程式所佔的主記憶體空間.
• • • • • 堆疊機器使用1或0個運算元指令. LOAD 和 STORE 指令需要一個運算元的記憶體位址 其它的指令內定從堆疊取出運算元. PUSH 和 POP 只會存取堆疊的最上端元素. 二元指令 (e.g., ADD, MULT) 使用堆疊最上面的二個 項目進行運算.
13
5.2 指令格式
– 要將值放在非字組邊界比較容易. – 從16-bit 整數位址轉換到32-bit 整數位址時不 需要額外的算數運算.
9
5.2 指令格式
• 下一個要考慮的架構設計問題是CPU如何儲存資料.
• 我們有三種選擇:
1. 堆疊架構 2. 累加器架構 3. 通用暫存器架構.
• 在選擇時, 會考慮到硬體設計的複雜度(及成本)及執 行速度和使用的簡單性.
• 指令的複雜度. • 指令的長度 (in bits). • 指令集中有多少不同的指令.
5
5.2 指令格式
設計指令集時要考慮下列:
• 指令長度.
– 短, 長, 或是可變動長度.
• 運算元數目. • 可定址的暫存器數目. • 記憶體組織.
– byte- 或 word 定址.
• 定址模式.
– 提供那幾種: 直接, 間接, 或是索引法.
19
5.2 指令格式
• 我們看到了ISA運算元個數是如何影響指令 的長度. • 在任何的指令集中, 並不是所有的指令都要 相同的運算元個數. • 像一些不用運算元的指令, HALT, 如果是用 固定長度的指令就會浪費空間.
• 使用擴充碼可以利用到這些浪費的空間.
20
5.2 指令格式
• 某系統有16個暫存器和 4K 的記憶體. • 我們需要 4 bits 來選擇其中一個暫存器. 我們 需要 10 bits 來當記憶體位址. • 如果該系統要有 16-bit 的指令, 我們會有二種 選擇:
7
5.2 指令格式
• 舉例來說, 假設我們有一個十六進制數 12345678. • 那 big endian 和 small endian 的排列如下.
8
5.2 指令格式
• Big endian:
– 較為直覺. – 數目的正負號可以經由最低位元查出. – 字串和整數的儲存順序相同.
• Little endian:
14
5.2 指令格式
• 後置式的主要優點是不需要用括號.
• 例如, 中置表示式,
Z = (X Y) + (W U),
變成:
Z = X Y W U +
這樣的後置表示.
15
5.2 指令格式
• 在一個堆疊的 ISA 中, 後置表示,
Z = X Y W U +
看起來就像是:
PUSH X PUSH Y MULT PUSH W PUSH U MULT ADD STORE Z
18
5.2 指令格式
• 在二個位址的 ISA, (e.g.,mainframes),中置表示 式是,
Z = X Y + W U
看起來會是:
MULT R1,X,Y MULT R2,W,U ADD Z,R1,R2
這個程式執行起來會比stack-based ISA (程式較長)花更長的 時間嗎??
注意: 運算完的結 果內定是儲存在堆 疊的上方!
16
5.2 指令格式
• 在 1個-位址的 ISA, 像 MARIE, 中置表示式,
Z = X Y + W U
看起來會是:
LOAD X MULT Y STORE TEMP LOAD W MULT U ADD TEMP STORE Z
17
5.2 指令格式
• 使用堆疊駕構時, 我們需要以不同的角度來 思考算術運算的表示式. • 我們很熟悉用中置表示法來寫式子, 像是: Z = X + Y. • 堆疊算術則需要後後置式表示法: Z = XY+.
– 又名為 reverse Polish notation, (有點) 為了紀 念發明者, Jan Lukasiewicz (1878 - 1956).
• 在二個位址的 ISA, (e.g.,Intel, Motorola), 中置表 示式是,
Z = X Y + W U
看起來會是:
LOAD R1,X MULT R1,Y LOAD R2,W MULT R2,U ADD R1,R2 STORE Z,R1
注意: 一個位址的 ISAs 通常有一個 運算元要在暫存器 中.
相关主题