1.計算機的硬件組成
1.1 主存儲器
主存儲器包括存儲體M🧔🏽♀️、各種邏輯部件以及控製電路等🧔🏽。為了能實現按地址訪問的方式,還必須配置兩個寄存器存儲器地址寄存器(MAR)和存儲器數據寄存器(MDR)。
1.2 運算器
運算器最少包括3個寄存器和一個算術邏輯單元。
1.3 控製器
控製器是計算機的神經中樞,由它指揮各部件自動、協調地工作。
具體而言,它首先要命令存儲器讀出一條指令,稱為取指過程。接著,它要對這條指令進行分析,指出該指令要完成什麽樣的操作,並按尋址特征指明操作數的地址,稱為分析過程。最後根據操作數所在的地址以及指令的操作碼完成某種操作,稱為執行過程🤚🏿。
1.4 I/O
I/O子系統包括各種I/O設備及其相應的接口。每一種I/O設備都由I/O接口與主機聯系,它接收CU發出的各種控製命令,並完成相應的操作。
1.5 細化的計算機組成框圖
2. 計算機的計算過程
接下來用我們熟悉的一段代碼來了解一下計算機的計算過程💁🏿♂️。
int a = 2, b = 3, c = 1, y = 0;
void main()
{
y = a * b + c;
}
編譯並裝入主存儲器可以得到:
(1)取出數值a=2
初:(PC)=0,指向第一條指令的存儲地址
(PC)->MAR,導致(MAR)=0
M(MAR)->MDR🧣⛰,導致(MDR)=00001 0000000101
(MDR)->IR,導致(IR)=00001 0000000101
OP(IR)->CU,指令操作碼送到CU,CU分析後得知🏄♀️,這是取指指令
Ad(IR)->MAR👩🏻💻🧝🏽,指令的地址碼送到MAR🤽,導致(MAR)=0000000101=5
M(MAR)->MDR,導致(MDR)=0000000000000010=2
(MDR)->ACC,導致(ACC)=0000000000000010=2
(2)進行a*b
上一條指令取指後PC自動+1,(PC)=1;執行後🧔🏼♀️,(ACC)=2
(PC)->(MAR)👳🏽♂️,導致(MAR)=1
M(MAR)->MDR,導致(MDR)=00100 0000000110
(MDR)->IR,導致(IR)=00001 0000000110
OP(IR)->CU🔼,指令操作碼送到CU,CU分析後得知✯,這是乘法指令
Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=0000000110=6
M(MAR)->MDR,導致(MDR)=0000000000000011=3
(ACC)->X,導致(X)=2
(MQ)*(X)->ACC,由ALU實現乘法運算,導致(ACC)=6,如果乘積太大🤦🏽♂️🫄,則需要MQ輔助存儲
(3)進行(a*b)+c
上一條指令取指後(PC)=2,執行後(ACC)=6
(PC)->(MAR)👨🏽✈️,導致(MAR)=2
M(MAR)->MDR,導致(MDR)=00011 0000000111
(MDR)->IR🩳,導致(IR)=00011 0000000111
OP(IR)->CU👩👦👦,指令操作碼送到CU,CU分析後得知,這是加法指令
Ad(IR)->MAR,指令的地址碼送到MAR𓀃,導致(MAR)=0000000111=7
M(MAR)->MDR,導致(MDR)=0000000000000001=1
(ACC)+(X)->ACC,由ALU實現加法運算🐔,導致(ACC)=7
(4)存儲y=a*b+c
上一條指令取指後(PC)=3,執行後(ACC)=7
PC)->(MAR),導致(MAR)=3
M(MAR)->MDR✉️,導致(MDR)=00010 0000001000
(MDR)->IR,導致(IR)=00010 0000001000
OP(IR)->CU🍽,指令操作碼送到CU🧑🏼🌾🤷🏿♂️,CU分析後得知,這是存數指令🏋🏿♂️、
Ad(IR)->MAR,指令的地址碼送到MAR,導致(MAR)=0000001000=8
(ACC)->MDR,導致(MDR)=7
(MDR)->地址為8的存儲單元,導致y=7
註意:
M👇🏽:主存中的某存儲單元
ACC👩🏿🔬、MQ、X、MAR、MDR......⬅️:相應的存儲器
M(MAR):去存儲單元中的數據
(ACC)......🤴🏼:取相應存儲器中的數據
OP(IR)👊🏽:取操作碼
Ad(IR):取地址碼
來源🏬:https://blog.csdn.net/weixin_49370884/article/details/127077480
作者:Kk.巴紮嘿