本文說明的是單純的一般的計算指令從儲存設備中取出來之后,運行時(取址,譯碼,執行,回寫 -- 這些操作)在CPU和我們的主存之間的執行過程
以下,我們使用一條簡單的指令進行引入,后續再添加其他的情況:
ADD R0,[6] //將主存地址為6的內容取出和寄存器R0的內容相加,並回寫入R0中
為了更加明確的了解后續的執行過程先普及一下基本的計算機結構(一個簡單的模型機):
模型機的結構

主存的結構(模型機)

CPU
的控制器(CC)結構


CPU的運算器(CA)結構

以上
好的,現在可以進入正題了,
tips: 上面的都是說的模型機的結構,不代表現在的硬件的真實的結構
下面這個圖是就是執行的環境


通過上面的圖,我們可以看出:R0中儲存的是數值3,PC中儲存的內容是0001
第一步:取址
- 控制器將指令的地址送往寄存器
- 存儲器按給定的地址讀取處指令的內容,送回控制器
PC中是記錄的當前下一條需要執行的指令的地址,開始執行
情景參與角色:CPU_控制電路,存儲器_控制邏輯,存儲器_MDR,CPU_MDR,CPU_IR
CPU_控制電路: CPU_PC,把你的東西給CPU_MAR,好告訴存儲器該做什么PC,CPU_MAR: 收到 (於是CPU_MAR獲得了PC中的東西)----------此時,CPU_MAR在cpu控制電路的指導下,將數據通過 地址總線發送給了存儲器的MAR ,CPU_控制電路並告訴了存儲器的控制邏輯只是一個只讀的存儲器_MAR: 地址譯碼器大哥,有你的任務地址譯碼器 : 曉得了 (此時控制邏輯通過控制總線告訴CPU : "I am ready" 過了一會對MDR說) 莫睡了,快起來給你個數據。存儲器_MDR: MMP,要的 (獲得0001處的內容,10101010)存儲器_MDR: CPU_MDR,我弄好了,給你CPU_MDR: 好,給我嘛,已收到!CPU_IR: 給我,我現在要給指令譯碼的部分了! (CPU_MDR的內容復制給)CPU_PC: 悄悄的自增。(變成下一條指令的地址)
取址的工作完成
以下是圖解:


第二步:譯碼
- 控制器分析指令的操作性質
- 控制器向有關部件發出指令所需的控制信號
CPU_IR現在將數據傳送給指令譯碼器,指令譯碼器知道了這個指令代表的含義是:ADD R0,[6]


第三步:執行
- 控制器從通用寄存器或存儲器取出操作數
- 控制器命令運算器對操作數進行指令規定的運算
通過譯碼找到了加數的位置是內存中的第6個的位置,此時CPU_MAR中保存着這個數值0110,CPu控制電路發送只讀命令,CPU_MAR將數據送入存儲器_mar中,通過地址譯碼器找到第0110位置的內容,將內容給存儲器_MDR,此時控制邏輯發送Ready信號,CPU_MDR開始接收數據,變為00000010,然后MDR和R0通過內部總線將數據送入X,Y寄存器中,XY的內容作為A,B輸入進ALU中,然后將結果保存在Z寄存器中,F寄存器中保存的是當前運算結果的狀態。
圖解:

第四步:回寫
- 將運算結果寫入通用寄存器或存儲器(這個要看是代碼是怎么寫的,默認前面的存儲空間就是回寫的位置)

聲明:以上圖片來自北京大學陸俊林老師的計算機組成原理課程PPT
這個過程就完成了,寄存器和內存中的內容進行ADD操作並回寫如寄存器中的步驟就是這樣的
思考:如果是寄存器和寄存器中的內容進行相加呢?內存某位置內容和寄存器內容相加回寫入內存某一個位置呢?