1. 程式人生 > >一條匯編指令是如何在計算機的硬件中進行執行的

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

環境 color 存儲空間 blank CA 默認 其他 -a 單純

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

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