最近一直浸淫在計算機編程中無法自拔。哲學 認識論中講過。人類的求知的過程是由兩次飛躍。第一是從感性認識到理性認識;第二是從理性認識到實踐。這段話對有些人是適用的。我就是其中的一名。在知乎上求助問題“學計算機要懂匯編嗎?”,地下有人回復說,對有些人是必須要學會的。因為當我們滿臉疑惑的問別人,別人可能會甩我們一臉“你問這個有用嗎?”,可我們的腦袋上都套著一句話“你不明白這個,你怎么能看第二章呢?”,對于我來講,知識的斷層是特別影響我求知的道路。
說說我的學習路線。《VS2010輕松學習C#-從零到深入-天轟穿.NET4趣味編程視頻教程》,田老師是一個嬉笑怒罵皆文章的人,是一個沒有被體制內教育束縛的人。實踐證明,一個人若要是想干成一件事情,循規蹈矩的路子不一定是唯一的路子。第二步,《c#高級編程》(第6版),講得是深入的c#的基礎知識。第三步,《匯編語言》(王爽 第2版)。通過視頻我大概了解了什么是編程,編程到底是怎么起作用的。這是我的一個感性認識。然后我需要用專業的知識填充我的理性認識。
下面說一下 計算機的原理,這些編程語言,到底是怎么就讓計算機工作了:
歸根到底,計算機是怎么就能工作呢?其實這個原理的本質 和 “人 按了一下開關 燈就亮”是一樣的,“人按開關”,是一個命令,開關接受到命令之后,電流接通,燈變亮了,從“0”變成了“1”。 計算機的機器指令是一列二進制數字,計算機將之轉變為一系列的高低電平(高低電壓),以使計算機的電子器件收到驅動,進行運算。
? ? ?我們把這個過程獨立出來“執行計算機指令,進行運算”,進行這個步驟的就是我們熟知的CPU,每一個種類的CPU,由于硬件的設計和內部結構的不同,就需要用不同的電平脈沖來控制,使它工作。所以每一種類的CPU都有自己的機器指令集,也就是機器語言。這樣的話,編程的作用就是,用一堆的 0 1 符號控制各個“開關”,實現自己想要達到的效果。這種編程語言,就叫做機器語言。比如,讓8086cpu 計算s= 768+12288-1280,機器語言是這樣子的:
? ? ? ? ? 101100000000000000000011 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 000001010000000000110000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 001011010000000000000101
這樣子很難受了,每一個CPU都有不同的機器語言庫,要自己算個東西,得把每個機器語言庫的01語言代表的意思都記住。太麻煩了,不行,得想個辦法。
我能不能這樣,我想命令機器,把在A上存儲的東西移動到B上。我就直接寫 "mov a , b"?然后指定一個規則,讓機器自己翻譯成01語言,這樣就不用記那么多的數字了。可問題又來了,如何翻譯成01語言呢?
剛開始我一直在找編譯器的原理,找各種編譯的方法。但是不管怎么樣都是一頭霧水。知道天降一本神書《編碼-隱匿在計算機軟硬件背后的語言》解釋我心中多年的困惑。上網上百度書評,基本都是好到爆。上一段的那個問題,推薦讀這本書,這本書中會告訴你期盼已久的答案。
?
?