1.概述
指令系統(tǒng):指一臺計算機所具有的
全部機器指令的集合,反映了該計算機所擁有的基本功能,是計算機硬件的語言系統(tǒng),也被稱為機器語言
- CISC與RISC指令系統(tǒng)的特點及區(qū)別
| CISC | RISC |
|---|---|
| 指令系統(tǒng)龐大,軟件硬化 | 指令系統(tǒng)簡單 |
| 指令格式和尋址方式多樣性 | 指令長度固定,指令格式,尋址方式種類少 |
| 編譯程序復雜,程序編譯速度慢 | 優(yōu)先選取高頻簡單指令,避免復雜指令 |
| 大多數(shù)指令功能復雜 | 各字段劃分比較一致,功能也比較規(guī)整 |
| 各種指令都可訪問存儲器 | 只有LOAD,STORE指令可訪問存儲器 |
| 絕大多數(shù)指令需多個機器周期完成 | 多數(shù)指令一個機器周期內(nèi)完成 |
| 控制單元設計采用微程序控制技術 | 控制單元設計采用硬布線控制邏輯 |
| 各種指令使用頻度相差懸殊 | CPU使用流水線結構 |
| 難以調(diào)試維護,可靠性差 | 采用編譯優(yōu)化技術,減少程序執(zhí)行時間 |
-
指令系統(tǒng)的設計原則
- 完整性:要求通用計算機應具備完善的指令功能
- 規(guī)整性:所有運算部件都能等同地訪問所有數(shù)據(jù)存儲單元
- 高效性:利用該指令系統(tǒng)編寫的程序能夠高效率地運行
- 兼容性:通常只能做到
向上兼容,向后兼容
-
地址空間
- 三地址空間:通用寄存器,主存儲器,輸入輸出設備分別進行
獨立編址 - 二地址空間:通用寄存器獨立編址,主存和I/O設備統(tǒng)一編址,
優(yōu)點:能夠簡化指令系統(tǒng),不必另外設置輸入輸出指令,所有能訪問主存的指令都能訪問I/O設備
缺點:所有訪問主存的指令都需通過地址譯碼來判斷是否訪問I/O設備,影響指令的執(zhí)行速度
二地址空間 - 一地址空間:所有設備
統(tǒng)一編址,地址編碼最長,所有能訪問寄存器的指令,也能訪問主存和I/O設備
一地址空間 - 零地址空間:隱含編址方式,堆棧計算機中有這種方式
- 三地址空間:通用寄存器,主存儲器,輸入輸出設備分別進行
-
獨立編址和統(tǒng)一編址的對比
- 獨立編址
專用的I/O端口編址,存儲器和I/O端口在兩個獨立的地址空間中- 優(yōu)點:I/O端口的地址碼較短,譯碼電路簡單,存儲器同I/O端口的操作指令不同,程序比較清晰;存儲器和I/O端口的控制結構相互獨立,可以分別設計
- 缺點:需要有專用的I/O指令,程序設計的靈活性較差
- 統(tǒng)一編址
存儲器映像編址,存儲器和I/O端口共用統(tǒng)一的地址空間,當一個地址空間分配給I/O端口以后,存儲器就不能再占有這一部分的地址空間- 優(yōu)點:不需要專用的I/O指令,任何對存儲器數(shù)據(jù)進行操作的指令都可用于I/O端口的數(shù)據(jù)操作,程序設計比較靈活;由于I/O端口的地址空間是內(nèi)存空間的一部分,這樣,I/O端口的地址空間可大可小,從而使外設的數(shù)量幾乎不受限制
- 缺點:I/O端口占用了內(nèi)存空間的一部分,影響了系統(tǒng)的內(nèi)存容量;訪問I/O端口也要同訪問內(nèi)存一樣,由于內(nèi)存地址較長,導致執(zhí)行時間增加
- 獨立編址
2.編址方式
-
按字編址
- 實現(xiàn)容易簡單,每個
編址單位與設備的訪問單位一致,即每個編址單位所包含的信息量(二進制位數(shù))與訪問一次設備所獲得的信息量是等同的,早期采用這種方式 - 缺點:對非數(shù)值計算支持不足,不支持
字節(jié)操作,位操作,需專門設置字節(jié)操作指令,微操作指令
- 實現(xiàn)容易簡單,每個
-
按字節(jié)編址
- 編址單位是
字節(jié),與信息的基本單位一致 - 即有字節(jié)地址,又有字地址,字節(jié)地址一般連續(xù),字地址一般不連續(xù)
字地址 = n * 字長 / 8(n = 0,1,2,...) - 每個編址單位所包含的信息量與訪問一次存儲器所獲得的信息量不相同
- 編址單位是
-
字節(jié)編址順序問題
- 小端方式(低字節(jié)低地址)
字節(jié)地址從左往右逆序
小端方式 - 大端方式(高字節(jié)低地址)
字節(jié)地址從左往右升序
大端方式
- 小端方式(低字節(jié)低地址)
-
數(shù)據(jù)存放邊界對齊問題
- 邊界對齊
- 規(guī)定了
字節(jié),半字,單字,雙字存放的起始位置 - 優(yōu)點:訪問各種長度的數(shù)據(jù)都可在
一個存儲周期內(nèi)完成,讀寫控制簡單 - 缺點:造成
存儲空間浪費,存儲空間利用率低
邊界對齊
- 規(guī)定了
- 邊界不對齊:可從
任意位置開始存儲- 不浪費存儲空間,不同長度的數(shù)據(jù)
一個緊接著一個存放,存儲空間利用率高 - 訪問雙字,單字都有可能
跨越兩個字單元存放,可能需花費兩個存儲周期的時間,存儲器工作速度降低一倍 -
存儲器讀寫控制復雜
邊界不對齊
- 不浪費存儲空間,不同長度的數(shù)據(jù)
- 邊界對齊
3.指令格式
- 操作碼:給出指令操作性質(zhì),即指令要完成的功能
-
地址碼:指出操作數(shù)的地址,或下一條指令在主存儲器中的地址
指令基本格式 - 三地址指令:指令執(zhí)行后
兩個源操作數(shù)內(nèi)容不變,但指令字長較長- 通常完成 A3 <- (A1)OP(A2)
三地址指令
- 通常完成 A3 <- (A1)OP(A2)
- 二地址指令:兩個源地址之一和目的地址結合起來,留下另一個源地址格式保持獨立
- 通常完成 A1 <- (A1)OP(A2)
- 優(yōu)勢:通過減少一個地址碼字段,可以
減少指令字長度。可通過增加地址碼字段位數(shù),提高可尋址范圍 -
缺點:影響了程序的靈活性
二地址指令
- 一地址指令:在二地址指令格式基礎上,將源操作數(shù)或目的操作數(shù)設定到一個
專用寄存器(通常為AC累加器)中- 通常完成 AC <- (AC)OP(A)
一地址指令
- 通常完成 AC <- (AC)OP(A)
- 零地址指令:源操作數(shù)和目的操作數(shù)都
內(nèi)含在一個處理機堆棧中,由兩個棧頂單元提供兩個源操作數(shù),結果(目的操作數(shù))存放在棧頂
零地址指令 - 地址碼個數(shù)選擇標準
- 程序所占存儲量盡可能小
- 程序的執(zhí)行速度盡可能快
4.操作碼擴展技術
可充分利用指令信息位,有效壓縮操作碼平均長度
基本思想:當采用定長指令字格式,且多種地址碼結構混合使用,可利用地址碼個數(shù)較少的指令空出來的地址碼字段,來增加操作碼的位數(shù)
- 定長操作碼: 操作碼
OP長度固定,指令譯碼結構簡單,浪費信息位 - 變長操作碼:操作碼
OP長度不固定,
首先需明確兩個原則: - 不允許短碼是長碼的前綴
-
可表示的指令的操作碼一定不能重復
通常用全1作為擴展標志碼,例如下圖,4位操作碼時,用1111作為擴展標志碼,該操作碼不表示三地址指令,這樣,8位操作碼時,操作碼高4位全為1表示是因為不允許短碼是長碼的前綴,若高4位用從0000~1110之間任一編碼,則違反了上述第一個原則,故高位必須是上一長度操作碼的擴展標志碼,只能從低位開始進行當前操作碼長度指令編碼,故最多可表示15條二地址指令,12位時,11111111作為擴展標志碼,16位操作碼時,由于后面沒有可擴展的地址空間了,故1111111111111111 可以表示一條零地址指令
5.尋址方式
幾個與地址相關的概念
形式地址:指指令中顯式給出的地址
有效地址:也稱邏輯地址,通常指在本程序中的相對地址,可根據(jù)形式地址通過某種變換得到
即 有效地址 = 形式地址 + 尋址方式
- 指令尋址:
確定下一條將要執(zhí)行的指令所在主存單元地址的方法- 順序尋址:程序計數(shù)器
PC+1,自動形成下一條指令地址,PC初始值設定為該程序第一條指令所在主存單元的地址 - 跳躍尋址:
轉移類指令給出下一條指令的地址信息
- 順序尋址:程序計數(shù)器
- 數(shù)據(jù)尋址
如圖,通常在指令地址碼字段設置尋址方式子字段,又稱尋址特征字段,指出具體尋址方式,另一個子字段給出形式地址,一條指令可能包含多個操作數(shù),各操作數(shù)的尋址方式可以不同
一地址指令-
基本尋址方式
根據(jù)數(shù)據(jù)所在位置不同可分為:-
立即尋址:
操作數(shù)直接在指令地址碼字段給出,即操作數(shù)本身設在指令字中- 形式地址 I 不是操作數(shù)的地址,而是
操作數(shù)本身,又稱立即數(shù) -
#表示立即尋址特征 - 只能用于
源操作數(shù)尋址 - 作用 :
給寄存器賦初值,立即數(shù)作為常數(shù)參與運算 - 有效地址EA 就是
該指令在主存單元的地址 - 特點:只要取出指令,便可立即獲得操作數(shù),執(zhí)行階段不必再次訪問存儲器,指令
執(zhí)行速度快 - 缺點:I 的位數(shù)限制了所能表示的
立即數(shù)范圍,大量使用立即尋址程序的通用性會下降
立即尋址
- 形式地址 I 不是操作數(shù)的地址,而是
-
寄存器尋址 : 指
源操作數(shù)已經(jīng)在通用寄存器中,或操作結果要返回通用寄存器,源操作數(shù),目的操作數(shù)都適用- 形式地址
EA = Ri,Ri為通用寄存器編號 - 獲得操作數(shù)
無需訪問內(nèi)存,指令執(zhí)行時間短 - 形式地址字段只需指明
寄存器編號(位數(shù)遠小于主存單元地址位數(shù)),故指令字長短,節(jié)省存儲空間
寄存器尋址
- 形式地址
-
存儲器尋址
按有效地址形成方式,可分為:-
直接尋址:地址碼字段的
形式地址A就是操作數(shù)或下一條指令的有效地址- 有效地址
EA = A -
形成地址無需變換,獲得有效地址比較簡單, - 指令執(zhí)行期間
需訪問一次內(nèi)存 - 缺點:
指令字長限制了形式地址字段的位數(shù),故操作數(shù)或指令的可尋址范圍比較小
直接尋址
- 有效地址
-
存儲器間接尋址
- 形式地址是
操作數(shù)地址的地址 - 有效地址
EA = (A),括號表示地址A對應存儲單元的內(nèi)容 - 至少
兩次或兩次以上訪存才可獲得操作數(shù)(或指令),可多次間接 - 指令中
形式地址碼長度可以很短,但尋址范圍可以很大 - 尋址范圍取決于
主存字長m - 一次間接尋址的最大尋址范圍
2^m字,兩次間接尋址的最大尋址范圍2^(m-1)字(其中一位用來作間接尋址標志位,故為m-1次方) - 可為程序設計提供很好
靈活性 - 訪問不同主存單元數(shù)據(jù)時,可通過
改變形式地址對應主存單元內(nèi)容,而不必改變指令本身 - 缺點:
需多次訪問主存,影響指令執(zhí)行速度
存儲器一次間接尋址 - 多次間接尋址的
尋址標志問題
第一次間接尋址標志由指令給出,以后每次的間接尋址標志由緊接著訪問主存所取出來的地址碼給出,如果取出的地址碼的間接尋址標志位(通常用最高位)為1,則表示要用除去標志位后的部分作為地址碼,繼續(xù)訪問主存,直至取出來的間接尋址標志位為0為止,此時除去間接尋址標志位的地址碼即為有效地址
多次間接尋址
多次間接尋址
- 形式地址是
-
寄存器間接尋址
- 有效地址
EA = (Ri) - 指令中
地址碼長度更短,寄存器間接尋址范圍取決于寄存器位數(shù)(即機器字長n)
寄存器間接尋址
- 有效地址
-
偏移尋址
- 有效地址
EA = (Ri) + A,Ri 是專用寄存器或通用寄存器編號,形式地址A為偏移量,是有符號整數(shù)
偏移尋址
偏移尋址可分為如下三類:
- 相對尋址
- 有效地址
EA = (PC) + A,PC為程序計數(shù)器 - 地址碼字段較短
- 相對尋址范圍取決于
偏移量A的位數(shù)k,即尋址范圍為:(PC)-2^(k-1) ~ (PC)+2^(K-1) -1(A是有符號數(shù),k位補碼表示范圍為-2^(k-1) ~ 2^(K-1) -1) - 特點:只要操作數(shù)或下一條指令與當前指令的相對距離不變,無論程序存放在主存中哪段區(qū)域都可以正確執(zhí)行,即有利于程序在內(nèi)存中浮動 ,可編寫與位置無關的代碼
- 有效地址
- 變址尋址
- 引用一個
變址寄存器, - 若采用
專用變址寄存器Rx,有效地址EA = (Rx) + A - 若采用
通用寄存器Ri,有效地址EA = (Ri) + A -
常用于對數(shù)組處理或字符串操作,變址寄存器存放
地址修改量,形式地址A給出基本地址值(起始地址,無符號整數(shù)) - 操作數(shù)地址變化由
變址值增,減量完成 - 尋址范圍由
變址寄存器位數(shù)n決定,最大尋址空間2^n字
- 引用一個
- 基址尋址
- 引用一個
基址寄存器Rb, - 有效地址
EA = (Rb) + A - 常用于實現(xiàn)操作系統(tǒng)對用戶程序的動態(tài)定位
- 基址寄存器存放的是
基本地址值,一旦設定后一般用戶不能改變 - 操作數(shù)或指令地址變化由不同的偏移量A完成,尋址范圍由偏移量位數(shù)決定
- 引用一個
- 變址尋址和基址尋址的共同目標是不必修改程序中指令,而達到修改地址碼的目的
- 有效地址
-
段尋址:基址尋址的一種特例,用于
地址長度超過機器字長的場合- 基本思想:將主存空間在邏輯上劃分成若干段,一個程序可以占用多個段,對指令或操作數(shù)的訪問,需指出
所在段以及段內(nèi)偏移量。與機器字長相等的段地址和段內(nèi)偏移量錯位相加,獲得更長存儲器地址,段地址存放在專用的段地址寄存器Rs中 - 整個段尋址過程由
硬件自動完成,對用戶透明 - 段內(nèi)偏移量是其他尋址方式形成的有效地址EA
- 段尋址后形成的地址就是
實際的主存單元地址,即物理地址
- 基本思想:將主存空間在邏輯上劃分成若干段,一個程序可以占用多個段,對指令或操作數(shù)的訪問,需指出
-
-
堆棧尋址:FIFO先進后出
- 寄存器堆棧(硬堆棧)
- 存儲器堆棧(軟堆棧):在主存開辟一塊區(qū)域,一端固定稱為
棧底,另一端浮動稱為棧頂
-
復合尋址方式:將
兩種以上尋址方式聯(lián)合起來使用即復合尋址,關鍵問題在于地址的計算順序,一般從名稱反映,先按在前的方式進行尋址
-




















