計算機指令及架構

时间:2020-12-15 03:43:06

http://eportfolio.lib.ksu.edu.tw/user/4/0/4001E004/repository/%E8%A8%88%E7%AE%97%E6%A9%9F%E6%8C%87%E4%BB%A4%E5%8F%8A%E6%9E%B6%E6%A7%8B.pdf

計算機指令及架構
指令集架構,是電腦系統結構的一部分,其與程式設計有關,指令集架構包含對
資料型別,指令,暫存器,addressing mode,memory architecture,中斷以及異
常處理的處理,另外還有I/O。指令集架構包含一系列的opcode (機器語言),以
及處理器提出的命令。
指令集架構可以藉微架構來執行工作,微架構存在於電腦的處理器中,指令集架
構藉由微架構來工作,沒有微架構的話,指令集架構就只是一串機器語言,使用
不同微架構的電腦可以共用一個指令集。 例如,Intel 的Pentium 和AMD 的AMD
Athlon,這兩者採用同一版本的x86 指令集架構,即使這兩者的微架構並不同。
一些虛擬機器支援Smalltalk,Java 虛擬機器,微軟的通用語言執行庫虛擬機器,
他們的指令集架構將bytecode 翻譯成自然的機器語言並執行,全美達實作了能
編譯x86 指令的VLIW 處理器。
機器語言
機器語言是由敘述和指令所組成的。一個指令是由下面幾個部分所組成:
所使用的暫存器的編號。
特定記憶體的位置或是偏移量。
定址模式,找到特定的記憶體位置,以得到數字。
複雜的操作可以藉由將簡單的指令合併而達成,其為連續的執行,也可以藉控制
流程來執行指令。
指令的型態
有效的指令操作須包含:
資料處理與記憶體操作
將暫存器的值(一個值代表*處理器內一個暫時的位置)設為固定值。
將資料自記憶體移到暫存器,或是反過來。
從硬體內讀取或寫入資料。
算術邏輯
對兩個儲存於暫存器的數字進行add,subtract,multiply,divide, 將結
果放到一個暫存器內,一個或是更多的旗標可能被設置在status register 內。
位操作,藉對兩組數字(為兩串的數字,都由零與一構成,分別儲存於
兩個暫存器內)執行邏輯與和 邏輯或,還有對一個暫存器的整串數字執行邏輯
非。
比較兩筆數字(例如比大小,或是比是否一樣)
控制流程
分支,跳到程式的另一個位置去執行程式。
分支預測,假設某一條件成立,就跳到程式的另一個位置。
間接分支,在跳到另一個位置之前,將現在所執行的指令的下一個指令
的位置儲存起來,作為子程式執行完返回的地方。
複雜指令
一些電腦在他們的指令集架構內包含複雜指令。複雜指令包含:
將許多暫存器存成堆疊的形式。
移動記憶體內大筆的資料。
複雜或是浮點數運算(正弦,餘弦,平方根等等)
執行test-and-set指令。
執行數字存在記憶體而非暫存器的運算
有一種複雜指令單指令流多資料流,英文全名是Single-Instruction Stream
Multiple-Data Stream。或是向量指令,這是一種可以在同一時間對多筆資料進行
相同運算的操作。SIMD 有能力在短時間內將大筆的向量和矩陣計算完成。SIMD
指令使平行計算變得簡單,各種 SIMD 指令集被開發出來,例如MMX,3DNow!
以及AltiVec。
指令的組成
一條指令往往有好幾個區塊,這些區塊包含要做的運算(加或減),可能還包含資
料的原始或是目的地位置,以及常數。圖中的MIPS "Add" 指令允許使用者選擇
哪個暫存器是資料來源以及哪一個暫存器是要存運算後的結果,還有一個常數。
在傳統的架構上,一條指令包含 opcode,表示運算的方式,以及零個或是更多
的運算元,有些像是運算元的數字可能指的是暫存器的編號,還有記憶體位置,
或是文字資料。
在超長指令字 (VLIW)的結構中,包含了許多微指令,藉此將複雜的指令分解為
簡單的指令。
指令的長度
指令長度的範圍可以說是相當廣泛,從微控制機的4 bit,到VLIW系統的數百bit。
在個人電腦,大型電腦,超級電腦內的處理器,其內部的指令長度介於8 到64
bits(在x86 處理器結構內,最長的指令長達15 bytes,等於120 bits)。在一個指
令集架構內,不同的指令可能會有不同長度。在一些結構,特別是大部分的精簡
指令集 (RISC),指令是固定的長度,長度對應到結構內一個 字的大小。在其他
結構,長度則是byte 的整數被或是一個halfword。
設計
對微處理器而有兩種指令集。第一種是複雜指令集(Complex Instruction Set
Computer),擁有許多不同的指令。在1970年代,許多機構,像是IBM,發現有
許多指令是不需要的。結果就產生了精簡指令集(Reduced Instruction Set
Computer),它所包含的指令就比較少。精簡的指令集可以提供比較高的速度,
使處理器的尺寸縮小,以及較少的電力損耗。 然而,比較複雜的指令集較容易
使工作更完善,記憶體及快取的效率較高, 以及較為簡單的程式碼。
一些指令集保留了一個或多個的opcode,以執行系統調用或軟體中斷。
指令集的使用
在設計處理器內的微架構時,工程師使用藉電路連接的區塊來架構,區塊用來表
示加法器,乘法器,計數器,暫存器,算術邏輯單元等等,暫存器轉移語言通常
被用來描述被解碼的指令,指令是藉由微架構來執行指令。 有兩種基本的方法
來建構控制單元,藉控制單元,以微架構作為通路來執行指令:
早期的電腦和採用精簡指令集的電腦藉將電路接線(像是微架構剩下的部
分)。
其他的裝置使用微程序來達成 — 像是電晶體ROM 或PLA (即使RAM 已使
用很久)。
電腦微處理器的指令集架構(Instruction Set Architecture)常見的有三種:
複雜指令集運算(Complex Instruction Set Computing,CISC)
目前x86 架構微處理器如Intel 的Pentium/Celeron/Xeon 與AMD的
Athlon/Duron/Sempron;以及其64 位擴展系統的x86-64 架構的Intel 64 的Intel
Core/Core2/Pentium/Xeon 與AMD64 的Phenom II/Phenom/Athlon 64/Opteron 都
屬於CISC系列。主要針對的作業系統是微軟的Windows。另外Linux,一些UNIX
等,都可以運行在x86(CISC)架構的微處理器。
精簡指令集運算(Reduced Instruction Set Computing,RISC)
RISC這種指令集運算包括HP 的PA-RISC,IBM 的PowerPC,Compaq(被併
入HP)的Alpha,MIPS公司的MIPS,SUN 公司的SPARC等。目前只有UNIX,Linux,
MacOS 等作業系統運行在RISC處理器上。
顯式並行指令集運算(Explicitly Parallel Instruction Computing,EPIC)
EPIC乃先進的全新指令集運算,只有Intel 的IA-64 架構的純64位微處理器
的Itanium/Itanium 2。EPIC指令集運算的IA-64架構主要針對的作業系統是微軟
64 位安騰版的Windows XP 以及64 位安騰版的Windows Server 2003。另外一些
64 位的Linux,一些64位的UNIX 也可以運行IA-64(EPIC)架構。
超長指令字指令集運算(VLIW)
通過將多條指令放入一個指令字,有效的提高了CPU各個計算功能部件的
利用效率,提高了程序的性能