CPU的內部結構
我們都知道CPU是一台電腦的核心部件,所有的程序都是通過它運行的,那么CPU是如何讓一個程序跑起來的呢?我們今天就來一起簡單的做個了解,首先看下CPU的基本結構
程序流程
假如現在我們有個兩個數相加的程序,當你點擊運行這個程序時,系統會將這個程序復制到內存中。程序中的這些數據和指令會被存儲在一個一個小的“內存空間”,並給每個空間一個“門牌號”,也就是內存中的地址。
系統將程序復制到內存中后,會將程序計數器設定到程序運行的開始位置(假設這個程序的開始位置是0100),然后開始運行;當CPU每執行一條指令,程序的累加器的值就自動加1,然后CPU的控制器就會參照程序計數器的數值從內存中讀取命令並執行,那么我們用圖表示這個流程的話大概是下圖中的樣子
在CPU進行運算時,標志寄存器的數值會根據運算結果自動設定。如果程序執行到跳轉指令的時候,會根據地址中的內容跳轉到對應的地址;條件分支在跳轉指令之前會進行比較運算,然后CPU根據標志寄存器的數值進行判斷是否要跳轉
函數調用
對CPU的執行流程有了個大概的了解后,我們現在可以來看看咱們平時寫的程序函數是怎么運行的了。在介紹之前我們先了解兩個機器語言指令
call指令,把函數要執行的指令地址存儲在名為棧的主內存
return指令,把保存在棧中的地址設定到程序計數器中
在上圖中,函數執行到0132的時候,並不是通過跳轉指令跳轉到Add函數的入口,而是通過call指令;這個地方和我沒前面講到的條件分支跳轉指令是不一樣的,因為調用完函數,我們還要返回函數調用的地方繼續下一條指令。
到此,我們可以對程序的運行過程有個大概的了解。