1. 程式人生 > 實用技巧 >《計算機是怎麼跑起來的》讀書筆記二:一臺簡易的微型計算機和機器語言

《計算機是怎麼跑起來的》讀書筆記二:一臺簡易的微型計算機和機器語言

文章目錄


前言

在計算機日新月異發展的今天,一系列裝置的複雜性和多樣性讓我們眼花繚亂。通常我們認為的計算機是大家使用的電腦裝置,其實在日常生活中各種電器裝置都可能含有一個微型計算機系統。 這些計算機是廣義上的含義,我們可以把含有CPU,記憶體,I/O裝置這三個主要元器件的裝置都叫做計算機。只不過,從個頭上來說,有的是微型計算機,有的是大型計算機,當然還要超級計算機。

一、簡易的微型計算機

一個最簡易的微型計算機系統可能只包含CPU,記憶體,I/O,但是要想讓它真正的正常工作,則需要更多的輔助裝置。在整合電路板上,可以比較簡單的認出的是一些電阻,電容,開關等。除了這幾個以外,值得我們認識的還有:

微型計算機系統

  1. 時鐘發生器,是一個產生時鐘訊號的元件。它輸出一個叫做"時鐘訊號"的電訊號,每隔一定的時間就變換一次電壓的高低。產生電訊號的根本是它帶有晶振,根據其自身的頻率(振動的次數)產生時鐘訊號。日常生活中,我們熟知的CPU的頻率是由它來決定的。

  2. 輸入裝置,像我們手中的鍵盤和滑鼠一樣的東西。向記憶體輸入資料的方式有兩種:第一種是通過I/O元件發起CPU指令,讓它讀取和寫入記憶體;第二種是通過DMA方式向記憶體寫入指令和資料。這裡如上左上角的方塊就是代表的DMA輸入元件。而我們發起CPU運算的資料輸入則是通過I/O來進行中轉的。

  3. 輸出裝置,不管是顯示器,還是五彩斑斕的LED燈光,還是大型機器的操作裝置,它們都通過I/O輸出的資料進行顯示或者操作。明顯來看,輸出並不代表是在顯示器上顯示出圖案或者文字,也可能是一個機械手打了你一拳。

二、機器語言

1.CPU內部結構

首先我們需要清楚的一點是,CPU裡的內部構造:

簡單CPU的內部結構

可以看出,CPU內部是很多功能不同的暫存器組成的。而這些暫存器裡是通過電壓不同的電訊號來記錄資料,也就是通常我們所說的0和1。所以,本質上來講計算機只認識0和1。它能做的運算只是把0變成1,把1變成0。這是一個很神奇的事情,通過0和1這兩個簡單的數字,計算機竟然能夠完成我們平常見到的各種各樣的運算。

2.機器語言

0和1是怎麼來運算的呢?

簡單的來說,通過0和1的排列組合,讓它表示一些事情。圖示中一直出現的Z80是要給8位元的CPU,它代表的意思是這個CPU用8位數字(0和1)組合在一起來表達一個含義。例如二進位制運算中的00000010等於十進位制中的數字2。對於計算機來說,任何事物都可以用0和1排列組合成的數字來進行表示。當然這個表示是人為定義的,所以在不同的CPU裡面,同樣的排列組合可能代表不同的意思。

在一個8位元的機器語言裡,你可能看到的是:

00000000 00111110
00000001 11001111
00000010 11010011

是不是完全看不懂,那就對了。


2.組合語言

一大串的0和1,總是讓人頭大的。幾百上千,甚至過完的指令和資料含義,想要記住是不可能的。所以在機器語言的基礎上,人們發明的助記符。把00111110變成日常生活中的英文單詞,這樣就簡單很多。
這就是組合語言的出現:

LD A,207
OUT (2),A
LD A,255

上述程式碼的含義是,LD是Load的縮寫,而LD A,207是把207讀入到暫存器A中,而後OUT (2),A,是把暫存器A的資料寫入到I/O地址對應的暫存器中。

前面提到,不同CPU的0和1組合可能代表不同的含義,而新增助記符之後的組合語言,則可以把這種差異進行統一。而在執行的時候,計算機自己把這些轉換成它認識的0和1。當然,有興趣的話,根據CPU的文件,也可以手動轉換。

雖然程式碼變得似乎簡單了些,但是看起來很多暫存器還是難以理解,但是計算機就是這樣,它基本都是由暫存器組成的不同功能。因為它只是儲存0和1,然後改變0和1。而為了更方便程式設計,很多更高階語言應運而生,C/C++/Java/C#/Lua/Js等等,它們逐步的更符合人類的思維習慣。


總結

看起來講的很簡單,但是事實上的計算機則運用到了更多的數學知識。要想用神奇的0和1做到更多,所付出的汗水是無法想象的。突然想起來大學時候的《微機原理和組合語言》這門課完全沒學,還掛科了,真是。。。後悔!