計算機要素--第二章 布爾運算

計算機系統要素,從零開始構建現代計算機(nand2tetris)
如果完成了本書所有的項目 你將會獲得以下成就

  • 構建出一臺計算機(在模擬器上運行)
  • 實現一門語言和相應的語言標準庫
  • 實現一個簡單的編譯器

而且,這本書的門檻非常低,只要你能熟練運用一門編程語言即可。本課程綜合了數字電路,計算機組成原理,計算機體系架構,操作系統,編譯原理,數據結構等的主要內容,搭建了計算機平臺的構建的框架,並未深入細節,如果需要了解細節,可由本書作爲主線,逐步完善的知識體系。

QQ交流羣(含資料):289682057
課程連接
項目地址Github


本章重點內容

  • 布爾運算

詳細內容

在剛學C語言的時候,我一直很好奇,人類是怎樣想出編程語言的?既然人類想出了編程語言,那麼爲什麼編程語言會是現在的這個樣子,比如指令爲什麼要那樣設計?即便是人類能夠將自然語言用0,1機器碼來表示,機器語言的存在和人類將自然語言翻譯成0,1機器碼是一種巧合,還是具有一定的關係呢?這種機器語言是像牛頓定律一樣先天存在呢,還是人類根據某些規則設計的呢?學完這一章,打開了我的疑惑。

我想這個過程應該是這樣的:“對於機器而言,0,1機器碼只不過是人類給的名字,機器碼的本體是高低電壓,在機器上加上電壓可以使機器工作。這應該就是編程最初的模樣,也就是給機器加電壓使之工作。慢慢的人類設計出一種稱爲ALU的東西,利用一定的邏輯可以進行運算,這種邏輯就是布爾邏輯。當然,ALU需要輸入很多電壓,這些電壓有的表示數據,有的表示計算函數。時序邏輯可以記錄電路的前一個狀態,在電路的輸入端,我們可以設置兩個輸入接口,輸入兩個電壓,一個表示是否保持電路的前一個狀態,一個表示本次輸入的電壓(又可以稱之爲數據),當我們一直設置爲保持前一個狀態的時候,就實現了一個簡單的存儲元件。後來,爲了方便計算,人類又將這些存儲元件和ALU封裝起來,形成一個稱爲CPU的東西。由於封裝起來的這些元件都需要在輸入接口輸入電壓才能進行工作,因此把這些內部邏輯封裝起來,把輸入接口和輸出端口暴露出來,形成了芯片。在芯片的輸入接口輸入高低電平就可以使芯片完成一定的計算任務,在我看來,這就是很高級的編程了。也許在當時看來,這只不過是一種電氣工作而且,但實際上這已經是編程了。後來根據不同輸入接口的電平所起的作用,將他們劃分爲操作碼和操作數。但它們本質上都是一股電壓。並且輸入接口的數量是由內部元件所需要的輸入電壓的個數而決定的,所以指令的長度是由芯片自身決定的,人類制定的規範只不過是爲了起輔助性的作用。操作碼和操作數構成了指令,然後爲了方便,使用數字0,1來進行表示,總不能畫一些電壓的曲線去表示指令吧!就這樣形成了機器語言,所以機器語言不是先天存在的,是人類爲了方便使用機器而制定的,當然這也是依據了機器的工作原理,機器的設計原理等等。”

後來隨着科技的發展,電子電路技術突飛猛進,機器語言弱點太明顯了,人類便發明了彙編語言,是將機器語言符號化形成的彙編,這個出發點是機器語言,目的是爲了方便使用,所以誕生了彙編語言,因此機器語言和彙編語言的直接本體都是高低電壓,只不過在邏輯上一個是0,1數字,一個是符號,由此可見彙編語言不是憑空想出來的,是發展的結果,是勞動經驗的總結,是勞動方法的改進。在我看了,這一步建立了符號和0,1機器碼的映射,也就是完成了編碼,就是所謂的將自然語言用0,1機器碼表示出來,當然,其他的語言符號的編碼規則沒有這麼簡單。所以機器語言的存在和人類將自然語言翻譯成0,1機器碼並不是一種巧合,而是勞動方法的改進。彙編語言還有非常複雜,跟人類自然語言相差甚遠,於是爲了方便,基於彙編語言又開發出來了可讀性更好的編程語言,如現在依然還在使用的C語言,而Java、Python等又是後來逐漸發展的結果。

由此可見,編程語言並不是人類突發奇想設計出來的,而是基於已有的電氣工作給出的概念。編程語言之所以是現在這個樣子,一方面取決於機器的工作原理和設計原理,另一方面受到了人類勞動的影響。機器的工作原理和設計原理決定了機器語言的格式,比如,根據不同的電壓所起的作用的不同決定了一些電壓是操作碼,一些電壓是操作數。人類勞動經驗的總結和勞動方法的改進使得編程語言可讀性更高、易使用性更強、門檻更低。

本文只是一篇學習總結,並不是一篇嚴謹的論文,也不是一篇科學知識的科普文章,文章只是爲了通俗化,所以並沒有使用很專業的術語,至於錯誤在所難免。

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