1.示例
指令格式:ADD R0,[6]
指令功能:
ADD這是一條加法指令
通用寄存器R0的內容+地址為6存儲單元的內容=運算結果(更新到R0)
2.過程
R0里面數為00000011十進制為3
地址為0110(6)存儲單元內容為00000010十進制為2
也就是計算3+2=5並且把運算結果返回到R0
2.1取指
①控制器將指令的地址送往存儲器。
②存儲器按給定地址獨處指令內容,送回控制器。
上圖具體步驟
1.控制器發出控制信號將PC寄存器里面的地址通過內部總線傳送到MAR寄存器里
2.MAR寄存器將地址送到地址總線上,與此同時控制電路會在控制總線上發出控制信號,並表示這次訪問
存儲器是讀取數據。
3.存儲器的MAR寄存器收到地址總線上的地址,並將其保存下來,存儲器里面的控制邏輯也會收到
控制總線過來的控制信號,得知這次操作是讀操作。
4.存儲器通過地址譯碼器對應地址0001存儲單元內容,並將該存儲單元內容送到MDR寄存器中。
存儲器的控制邏輯會通過控制總線向cpu反饋當前的傳輸已經主備好了。
5.同時MDR里面內容也送到數據總線上,隨后,cpu控制電路檢測到來自控制總線准備好Ready信號,得知
數據總線上准備好了數據。
6.因此cpu中的MDR寄存器將當前數據總線上傳送來的數值保存下來,這就獲得了我們要取的指令。
7.cpu中MDR寄存器的內容要傳送到IR指令寄存器中,當指令進入IR中,取指這部分算是完成了嗎?
8.PC寄存器更新為下一條指令的地址。0001變為0010,取指階段到此完成
2.2譯碼
①控制器分析指令的操作性質
②控制器向有關部件發出指令所需控制信號
上圖具體步驟
1.當前IR指令寄存器中的指令編碼送到指令譯碼部件。
2.指令譯碼部件根據指令編碼很快會發現這是一條加法指令,而且是吧R0
和存儲器地址為6的單元內容相加,把結果存入R0中。控制電路據此產生控制信號發到相關部件中
譯碼階段到此完成。
譯碼得到的指令:ADD R0,[6]
2.3執行
①控制器從通用寄存器或存儲器取出操作數
②控制器命令運算器對操作數進行指令規定的運算
上圖具體步驟
1.根據這條指令需要去取操作數,其中一個操作數在存儲器中地址為6的單元,因此在MAR寄存器中放入要取的操作數地址0110(十進制的6)。
2.MAR寄存器將地址發送到地址總線,同時控制電路發送讀取的信號到控制總線,存儲器的控制邏輯和MRA寄存器會接收到相應的信號,然后
查找到對應地址0110里面的內容00000010,送到MDR寄存器,存儲器控制邏輯向cpu反饋當前數據已經准備好的信號,MDR內容會被放到
地址總線上,cpu接收數據並放在MDR寄存器中。
3.cpu里面MDR寄存器數據要參與加法運算,cpu控制器會將MDR寄存器數據通過內部總線傳送到ALU的輸入Y寄存器中,這一個操作數已經准備好了。另一個操作數存放在R0寄存器中,因此控制器會將R0里面數據通過內部總線傳送到ALU另一個輸入端X寄存器。
4.現在兩個操作數R0和6已經准備好了,在控制電路的控制下ALU就會進行運算將X和Y寄存器里面的內容進行加法運算。結果是00000101(十進制5)
到此執行階段就結束了。
2.4回寫
①將運算結果寫入通用寄存器或存儲器
1.現在運算結果還在ALU的輸出端Z寄存器,控制電路會給出相應控制信號,將z寄存器內容傳送到
R0寄存器中,R0里面原來的數據會被新的結果覆蓋。這個加法運算的結果就保存到R0寄存器中
回寫階段到此完成。
3.CPU就會執行下一條指令