7-指令系统
README】
1.本文總結自bilibili《計算機組成原理(哈工大劉宏偉)》的視頻講解,非常棒,墻裂推薦;
機器指令:
- CPU能夠識別并且執行的操作命令;有可以理解為不同cpu,在生產時預設了一組或一簇指令;
指令集:
- cpu能夠執行的所有機器指令的集合;指令集也是軟硬件的交界面;
- 軟件通過指令系統告訴硬件做什么操作;硬件通過指令系統執行操作并返回操作結果;
【1】機器指令
?指令字長: 一條指令的長度有多少位
【1.1】指令的一般格式
| 操作碼字段 | 地址碼字段 |
【1.1.1】操作碼
操作碼: 指出機器做什么操作?此外還有些操作碼指出機器應該對什么類型的數據進行操作;
長度固定: 為了譯碼方便,譯碼器電路簡單;
3)擴展操作碼技術
3.1)為了支持操作碼的長度可變,我們要采用擴展操作碼技術來擴展操作碼長度;
- OP:操作碼部分;
- A1,A2,A3:地址碼;
假設操作碼和地址碼都是4位;所以指令集最多15條指令; 無法滿足計算機進行復雜操作的需求;
3.2)總結:
- 三地址指令:4位操作碼,無標識,其中 15~12位是操作碼;指令集最多15條指令;
- 二地址指令:8位操作碼,最高位4個1為標識,其中 11~8位是操作碼;指令集最多15條指令;
- 一地址指令:12位操作碼,最高位8個1為標識,其中7~4操作碼;指令集最多15條指令;
- 零地址指令:16位操作碼,最高位12個1為標識,其中3~0是操作碼;指令集最多15條指令;
三地址指令操作碼,每減少一種最多可多構成 2^4 種二地址指令;
如三地址指令的高4位是 1110,而不是1111;就可以多產生2^4種二地址指令;
3.3)問題1:哪些指令用長操作碼,哪些用短操作碼指令呢?
- 高頻使用的指令,用短操作碼;
- 低頻使用的指令,用長操作碼;
【1.1.2】地址碼
地址碼指的是內存地址;
1)四地址指令:
- 它的尋址范圍是2^6=64;內存尋址范圍太小了,只能尋址到64個內存單元;
那如何增加指令尋址范圍?
- 移除A4地址:A4存儲了下一條指令地址; 而下一條指令地址存儲在PC寄存器中,而不是當前指令中;這樣就形成了三地址指令;
2)三地址的指令:
- 它的尋址范圍是 2^8=256;照樣很小;繼續改進;
3)二地址指令:
- 移除A3地址碼,用A1或A2存儲計算結果;所以地址碼就只有2個;尋址范圍為 2^12=4k個存內存單元; 還是很小 ;
4)一地址指令
- 用ACC累加寄存器代替A1或A2;所以移除A2,指令中可以只保留一個數的地址;另一個操作數保存在ACC寄存器;
- 尋址范圍:2^24=16M; 尋址范圍大大增加 ;
- (ACC可以使用隱含尋址的方式)
5)零地址:無地址碼;
- 如,計算ACC中的操作數是否等于0 ;
- 如,add指令計算棧頂的兩個操作數的和,并將和保存在棧頂;就不需要地址碼;
【1.2】 指令字長
操作碼:
- 指出機器做什么操作?此外還有些操作碼指出機器應該對什么類型的數據進行操作;
長度固定:
- 為了譯碼方便,譯碼器電路簡單;
【小結】指令操作碼與地址碼
1)用一些硬件資源代替指令字中的地址碼:
- 如ACC累加寄存器(隱含尋址)存儲操作數,這樣指令中就可以只存儲一個操作數的地址;而無需存儲兩個操作數的地址;
2)當指令的地址字段為寄存器時;
- 三地址, OP R1 R2 R3 ; R1 R2 R3地址指的是寄存器的地址; 這樣就直接訪問寄存器,而不是訪問內存;
【2】操作數類型和操作種類
操作數:指的是指令要處理的數據;
操作數的類型:內存地址,或數字,或字符,或邏輯數;
1)數據在存儲器中的兩種存放方式:
- 大端方式:(內存字地址就是數據高字節所在地址)數據高字節放在內存高地址,數據低字節放在內存低地址;
- 小端方式:(內存字地址就是數據低字節所在地址)數據低字節放在高地址,高字節放在低地址;
2)字節編址
2.1)方法1:從任意位置開始存儲;
存儲字長64位(8字節):
- 內存的數據位(MDR寄存器)是64位,每次訪存可以存取64bit的數據;
機器字長32位(4字節):
- 寄存器的空間是32位,每次只能傳輸4字節數據;
| 機器字長:CPU一次能處理數據的位數,通常與CPU的寄存器位數有關。 存儲字長:存儲器中一個存儲單元(存儲地址)所存儲的二進制代碼的位數,即cpu中的MDR(數據寄存器)的位數。 指令字長:計算機指令字的位數。 數據字長:計算機數據存儲所占用的位數。 上述定義的字長都必須是字節的整數倍; |
?上述缺點有1個例子:一個數據跨了2個存儲字進行存儲;比如各占半個;這個時候就需要2個訪存,每次取半個存儲字;
2.2)方法2:從一個存儲字的起始位置(每個存儲字或機器字占4字節)開始訪問;
缺點:
- 浪費存儲空間;
問題:有沒有一種方式可以減少存儲空間浪費,又可以保證任何一種類型的數據(小于存儲字長)在一個存取周期當中,都可以進行訪問?
2.3)方法3:邊界對準方式(從內存地址的整數倍位置開始訪問) ;
以機器字長32位=4個字節為例;
?數據存放的起始地址是數據長度(如8位或16位)的整數倍
【2.3】 操作類型
?
?
?
【3】 尋址方式
參見 指令尋址方式與數據尋址方式_PacosonSWJTU的博客-CSDN博客
?
【4】 指令格式舉例
指令集舉例:
【4.1】IBM360 CPU的指令格式
IBM360 有5種指令格式:
- 第1種地址格式,RR格式:二地址,即2個寄存器參加操作,結果保存在1個寄存器中;操作碼的長度是8位; 指令長度16位;
- 第2種地址格式, RX格式: 二地址,即寄存器與存儲器,其中R1是寄存器,X是變址寄存器,B是基址寄存器,D是偏移地址;采用基址+變址的方式進行尋址;
- 第3種地址格式,RS格式:三地址,即寄存器與存儲器間的操作;如寄存器和內存間進行成組的數據傳送,如把寄存器R1到R3(包括R1 R3)的數據成組的傳送到內存中;內存的起始地址采用基址尋址的方式來做; B是基址寄存器,D是偏移地址;
- 第4種地址格式,SI格式:二地址,即立即數與內存操作數進行操作;
- 第5種地址格式,SS格式:二地址,即內存操作數與內存操作數進行操作;如內存中進行數據傳輸; B1,D1分別是源地址基址和偏移量;B2,D2是目的地址基址和偏移量;含義是把起始地址為B1+D1,長度為L的內存塊數據轉存到以B2+D2為起始地址的內存塊中;
補充:
- S=Storage=內存;
- R=Resiter=寄存器;
- X=變址寄存器;
- B=基址寄存器;
- D=偏移量;
【4.2】Intel 8086 CPU的指令格式
?
【5】RISC技術
RISC: 精簡指令集計算機;
CISC: 復雜指令集計算機;
RISC技術作用: 把20%的高頻簡單指令組合形成80%的低頻指令;
?
操作碼都是寄存器對內存的傳輸;
?
?
?
總結
- 上一篇: 5-输入输出系统IO
- 下一篇: win7精简_低配电脑的福音:这款小众系