一條匯編指令是如何在計算機的硬件中進行執行的


  本文說明的是單純的一般的計算指令從儲存設備中取出來之后,運行時(取址,譯碼,執行,回寫 -- 這些操作)在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操作並回寫如寄存器中的步驟就是這樣的
思考:如果是寄存器和寄存器中的內容進行相加呢?內存某位置內容和寄存器內容相加回寫入內存某一個位置呢?
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM