什麼是程序
上一篇介紹了計算機是如何工作的。但同學們已經發現了使用計算器的過程十分麻煩。誰也不會爲了求2+1去擺弄一大堆開關。現在想另外一個問題,現在要計算一萬個加法。即便再簡單,一個人算完一萬條估計也會吐血,而且還不能保證全對。一般遇到這種大量的重複性的工作,機器的優勢就體現出來了。因此,我們就要想辦法讓計算器自動計算,並在計算完後將結果保存在某個地方,以便我們可以獲取。
繼續以上一篇的2+1爲例,按步驟指令和數據的順序如下
順序 | 數字 | 指令/數據 |
---|---|---|
0 | 000 | 指令 |
1 | 010 | 數據 |
2 | 001 | 指令 |
3 | 010 | 指令 |
4 | 001 | 數據 |
5 | 011 | 指令 |
在計算不同數據的加法時,只需要對其中數據部分做修改即可。比如想計算3+3只需要將表格修改成
因此計算一萬條加法,我們只需要將以上序列複製一萬份,然後修改其中的數據部分便可。
最終我們可以得到一連串數字,這些數字有的是指令有的是數據,如下:
而這種有一定順序的,指令和數據的集合就叫做程序。
內存和控制器
有了程序之後,下一步就是讓計算器自動工作了。因此引入兩個新的設備,一個叫做控制器,一個叫做主存儲器。
主存儲器的作用是保存程序,並且可以供控制器讀取指令和數據,並允許控制器將計算結果保存到主存儲器中。我們最常見的主存儲是內存。內存的特點是只能在通電的條件下保存程序。控制器從主存儲器中讀取程序的操作叫做讀操作,將結果保存到主存儲器的操作叫做寫操作。對於內存的讀寫操作,分別叫做讀內存和寫內存
控制器作用是從主存儲器中讀指令和數據,然後將指令設置到計算器的控制端上,將數據設置到計算器的輸入端上,並將計算器輸出端的狀態保存到主存儲中。即代替人來完成設置計算器開關,和測量計算器輸出端電壓的工作。
最後整個裝置如下圖:
控制器和計算器合併在一起被稱爲CPU,即中央控制單元。實際上完整的CPU不僅僅包括控制器和計算器。CPU通常還有IO控制器,如控制鍵盤、鼠標、硬盤、顯示器等。
CPU和主存儲器通過總線鏈接。總線實際上就是一組導線,只不過它被嵌入在主板中。
指令集
上表只是舉個例子。真實的CPU支持的指令可不僅僅有4個。而且同樣的指令,對於不同的CPU對應的二進制數也不一樣。比如,A品牌CPU的加法指令對應11110000,B品牌CPU的加法指令對應00001111。CPU支持多少指令和每個指令對應的二進制數被稱爲指令集。目前最流行的指令集有兩個,一個是以Intel和AMD爲代表的X86指令集(主要用於服務器和桌面系統平臺),另一個是ARM指令集(主要用於移動端,如華爲、驍龍、蘋果的收集CPU)。