指令集結構的分類
指令集結構不同的原因
Q:指令集結構都是相同的嗎?如果不同,為什么不同?
不同的主要因素:CPU中用來存儲操作數的存儲單元的類型
為啥?那是因為CPU內部存儲單元的類型是不同的。
CPU存儲操作數的存儲單元有三種主要類型
- 堆棧
- 累加器
- 寄存器組
指令集的結構分類
PS:因此我們把指令集結構也分為三種類型
-
堆棧結構
-
累加器結構
-
通用寄存器結構
根據操作數的來源不同,可進一步被分為
- 寄存器-存儲器結構(RM結構)【操作數可以來自存儲器】
- 寄存器-寄存器結構(RR結構)【所有操作數都來自通用寄存器組】
這個結構也被稱作load-store結構,因為只有load指令和store指令可以訪問存儲器
這個進一步分為可能有點抽象,結合圖片和四種操作類型就很直觀了
還有兩個不知從哪里冒出來毫無邏輯的知識點,小聲bb
操作數的兩種給出方式
- 顯式給出:用指令字中的操作數字段給出
- 隱式給出:用事先約定好的存儲單元
用人話講,顯式給出就是直接給你看到,隱式告訴你個地址,你也能找到
四種指令結構的操作數位置(指令放在哪)結果去向(執行完指令后結果存在哪)
對應四幅圖(自己看鏈接ppt,不看也應該能明白)
堆棧結構:操作數放棧頂,結果存儲在棧里(很顯然啊,棧先進后出,你指令不放棧頂咋取?)
累加器結構:操作數和結果都在累加器中完成
通用寄存器(RM)結構通用寄存器(RR)結構的不同在於:
RM的操作數可以來自內存,RR必須來自寄存器。其他的都與前面的差不多,都在結構內部。
繼續划分
分割線,后面都是再講那個牛b的現代主流指令集結構以及深度划分( ̄ε(# ̄)
分析了四種之后,我們來介紹一下現代指令集結構的主流——通用寄存器結構
為什么可以成為主流?
- 訪問速度快
- 對編譯器友好
- 寄存器自己存變量不用訪問存儲器又快占地址位又少
根據ALU指令的操作數的兩個特征又可以對通用寄存器指令集結構進一步細分
不會有人不知道ALU是啥吧(算術邏輯單元)
ALU的兩個特征
-
ALU指令的操作數個數
- 三個操作數的指令(兩個源操作數、一個目的操作數)
- 兩個操作數的指令(其中一個既是源操作數又是目的操作數)
可以看看例題C = A + B中的操作
-
ALU存儲器操作數個數(0~3)
通用寄存器又多了一種 存儲器-存儲器型(MM型),還有RM,RR型
三種各有優缺點,八股文自行查詢(ง •_•)ง