CPU執行程序的原理(簡化過程)

前言
看了網上的一些描述CPU執行程序的過程,發現他們涉及到的內容太多了,恨不能把整個CPU的底層結構都拿出來說,這對計算機理論知識匱乏的新人甚至是一些老人都是非常不友好的。這個問題也是當初攔在我面前的一隻大老虎,把這個原理寫出來也有助於我自己的深入理解。

YouTube上的一個視頻How does CPU execute program,是一個很好的CPU執行程序原理的總結,英文水平還行的人建議看原視頻,就不用聽我瞎BB了。雖然沒有字幕,如果能看懂裏面的PPT,就基本能理解了。

以下內容主要是將視頻內容大致解釋一下,是寫給英文水平欠缺一點或者沒辦法看原視頻的人看的。如有錯誤,歡迎指正。

相關術語
RAM:指內存,斷電後內容無法保存,因此叫做易失性存儲;另一個相關的概念是ROM,一般指外存,例如硬盤。RAM的速度遠快於ROM,CPU與內存直接進行數據交換。

CPU:計算機的所有計算操作都由它執行,只要先記住它是一塊有輸入和輸出的集成電路就行了。

Instruction:指令,是CPU進行操作的基本單元,大致包含操作對象、操作對象的地址、對操作對象進行何種操作。

RAM相關結構
程序要想被CPU執行,首先要被編譯成CPU可以執行的指令操作,這裏就不詳細介紹,本文就假設程序已經被編譯好了,放在了內存中。內存中存放的數據分爲兩類,一類是指令;另一類是數據,不管是指令還是數據都有其對應的地址。

下圖就是接下來我們將會涉及的內存結構,這是從視頻中直接截取下來的,大家將就着看。

在上圖中,現在已經存放了地址爲100、104、108、112的一系列指令;地址爲2000、2004、2008的一系列數據。

CPU相關結構
這裏只放出CPU的執行指令時涉及的基本結構,真實的情況還會複雜很多。

這裏涉及到的結構有Program Counter(程序計數器)、Instruction Register(指令寄存器)、Data Register(數據寄存器)、ALU(算數邏輯單元),可以將計數器、寄存器都可以簡單理解爲存放數據的器件。上述程序計數器用來存放指令的地址;指令寄存器用來存放指令(初學者可能會搞混數據和地址的區別,稍加區分就可以分辨);數據寄存器存放參與計算的數據,下圖中的A、B、C都是數據寄存器;ALU就是用於計算的器件。

執行過程
本文內容爲便於理解,僅涉及到CPU和內存間的數據交換。

在瞭解了RAM和CPU相關結構之後,接下來就可以正式開始說明執行的過程,其實就是對以上敘述內容的一個組合。

程序計數器初始內容爲100,指向內存中的某一項指令,注意100指的是地址;
指令寄存器根據程序計算器的指向地址,將內存中地址爲100的指令抓取到自身,此時存放LOAD A,2000;
CPU按照指令內容,將內存地址爲2000的數據,上載到數據寄存器A中,此時CPU和RAM的狀態如下圖所示;
以上3步已完成一個指令的基本操作步驟。接下來程序計數器依次指向104指令地址、108指令地址、112指令地址,分別完成將2004地址的數據賦值給B數據寄存器;ALU將A、B內的數據相乘賦值給C數據寄存器;將C數據寄存器數據寫入內容地址2008中。
這樣就完成了50×0.1這個簡單程序的計算,最後CPU和RAM所處狀態如下圖所示。

--------------------- 
作者:董大蝦 
來源:CSDN 
原文:https://blog.csdn.net/dong_daxia/article/details/80289951?utm_source=copy 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章