
主存儲器的基本構成
類比:菜鳥驛站

情景再現
- 我們(CPU)拿取件號(地址)——給MAR(店員)
- 店員把貨架上的目標包裹(數據)——放到櫃台(MDR)——我最后從櫃台(MDR)取走包裹。
當然,數據可以存入也可以讀出,我們可以取出包裹,也可以存放包裹(臨時),只要告訴MAR(店員)即可。
補充
- 雖然是說邏輯上MAR、MDR屬於主存
- 但是現在的計算機通常把MAR、MDR也集成在CPU內
存儲體內部相關概念

- 存儲單元:存放一串二進制代碼的一個”小格子“、”小區域“
- 存儲字(word):存儲單元中存放的這一串二進制代碼
- 存儲字長:存儲單元中存放的二進制代碼的位數
- 存儲元:即存儲二進制的電子元件(電容,因為電容可以存儲電荷),每個存儲元可存1bit
比如要在地址 2 存儲數據

-
將要存入的目標地址”2“ 給到MAR
- MAR的位數反映了存儲單元的個數;
- 就像在店員的認知內,這個驛站有多大。
-
將要存放的存儲字給到MDR——所以,MDR 位數 = 存儲字長——櫃台的大小,這里能放多大的包裹
例:存儲體有多大?
-
MAR = 4bit —— 總共有2^4 個存儲單元
-
MDR = 16bit —— 每個存儲單元可存放16bit
B與b
易混淆:1個字節(Byte) = 8bit 1B=1個字節,1b=1個bit
-
商家廣告:100Mbps的寬帶
-
但它是小寫的b,所以實際上是12.5MB/s
運算器的基本組成
運算器:用於實現算術運算(如:加減乘除)、邏輯運算(如:與或非)
- ACC:累加器,用於存放操作數,或運算結果。
- MQ:乘商寄存器,在乘、除運算時,用於存放操作數或運算結果。
- X:通用的操作數寄存器,用於存放操作數
- ALU:算術邏輯單元,通過內部復雜的電路實現算數運算、邏輯運算
- 各自存放內容:

控制器的基本組成
- CU(Control Unit):控制單元,分析指令,給出控制信號IR:指令寄存器,存放當前執行的指令
- PC(Program Counter):程序計數器,存放下一條指令地址,有自動加1功能
- IR(lnstruction Register):指令寄存器

-
控制器是霸道總裁
-
但是 CU 控制單元是霸道總裁的老婆
-
霸道總裁是個耙耳朵,自然是要聽CU的
指令
完成一條指令:
- 取指令 PC
- 分析指令 IR【以上1、2可以定為一個取指環節】
- 執行指令 CU
計算機工作過程
各寄存器的注釋:
- M:主存中某存儲單元
- ACC、MQ、X、MAR、MDR...:相應寄存器
- M(MAR):取存儲單元中的數據
- (ACC):取相應寄存器中的數據
- OP(IR):取操作碼
- Ad(IR):取地址碼
- |||||||||||||
- 每一個存儲單元是16bit的存儲字長
- 只不過執行的時候,CPU會把它拆解成兩部分、操作碼、地址碼
- 每一次的指令執行過程都分為三個階段:取指令、分析指令、解析指令
CPU區分指令和數據的依據:指令周期的不同階段
在取指令的階段,MDR的內容一定是給IR
但是在執行階段,CU是來決定MDR的數據給ACC、MQ或者是X
例子
int a=2,b=3,c=1,y=0;
void main(){
y=a*b+c;
}//化成如下機器語言

1、取數
- 初:(PC)=0,指向第0條指令的存儲地址
- (PC) → MAR,導致(MAR)=0
- M(MAR)→ MDR,導致(MDR)=000001 0000000101
- (MDR)→IR,導致(IR)=000001 0000000101
- OP(IR)→CU,指令的操作碼送到CU,CU分析后得知,這是”取數“指令
- Ad(IR)→MAR,指令的地址碼送到MAR,導致(MAR)=5
- M(MAR)→MDR,導致(MDR)=0000000000000010=2
- (MDR)-→>ACC,導致(ACC)=0000000000000010=2
2、取乘法指令
- 上一條指令取指后PC自動+1,(PC)=1;執行后,(ACC)=2
- (PC)→MAR,導致(MAR)=1
- M(MAR)→MDR,導致(MDR)=000100 0000000110
- (MDR)→IR,導致(IR) = 000100 0000000110
- OP(IR)→Cu,指令的操作碼送到CU,CU分析后得知,這是“乘法”指令
- Ad(IR)→MAR,指令的地址碼送到MAR,導致(MAR)=6
- M(MAR)→MDR,導致(MDR)=0000000000000011=3
- (MDR)→MQ,導致(MQ)=0000000000000011=3
- (ACC)→x,導致 (X)=2
- (MQ)*(X)→ACC,由ALU實現乘法運算,導致(ACC)=6,如果乘積太大,則需要MQ輔助存儲
3、執行加法指令
- 上一條指令取指后(PC)=2,執行后,(ACC)=6
- (PC)→MAR,導致(MAR)=2
- M(MAR)->MDR,導致(MDR)= 000011 0000000111
- (MDR)→IR,導致(IR)= 000011 0000000111
- OP(IR)→CU,指令的操作碼送到CU,CU分析后得知,這是“加法”指令
- Ad(IR)→MAR,指令的地址碼送到MAR,導致(MAR)=7
- M(MAR)→MDR,導致(MDR)=0000000000000001=1
- (MDR)→x,導致(X)=0000000000000001=1
- (ACC)+(X)→ACC,導致(ACC)=7,由ALU實現加法運算
4、存儲數據
- 上一條指令取指后(PC)=3,執行后,(ACC)=7
- (PC)-→>MAR,導致(MAR)=3
- M(MAR)→>MDR,導致(MDR)=000010 0000001000
- (MDR)→lR,導致(IR)= 000010 0000001000
- OP(IR)→CU,指令的操作碼送到CU,CU分析后得知,這是“存數”指令
- Ad(IR)→>MAR,指令的地址碼送到MAR,導致(MAR)=8
- (ACC)->MDR,導致(MDR)=7
- (MDR)→地址為8的存儲單元,導致y=7
5、停機指令
- 上一條指令取指后(PC)=4
- (PC)→>MAR,導致(MAR)=3
- M(MAR)→>MDR,導致(MDR)=000110 0000000000
- (MDR)>IR,導致(IR)= 000110 0000000000
- OP(IR)→CU,指令的操作碼送到cu,CU分析后得知,這是“停機”指令
- 隨后利用終端機制通知操作系統終止該進程。
