計算機底層的原理很複雜,可以把這些複雜的知識用準確,生動,通俗易懂,且具有可操做性的方式寫成文字的做者真的很了不得,而我這就有幾本這樣的書推薦給你們,它們分別是《編碼-隱匿在計算機軟硬件背後的語言》([ 美]Charles Petzold著),《彙編語言》(王爽著),《30天自制操做系統》([日]川合秀石著),下面對這幾本書作簡單的介紹
。php
《編碼-隱匿在計算機軟硬件背後的語言》這本書是偏向數字電路的,從硬件這一層面講解了一些基本電子元器件的工做方式,好比8位加法器,觸發器,鎖存器等等,而後再進一步將這些電子元期間組合成內存,甚至cpu,簡單的說,它就是告訴你「計算機是如何工做的」。但是當提到數字電路的時候,你腦子裏首先想到的是什麼?是那些跟一座破廟裏面的蜘蛛網同樣混亂的電路圖?晦澀難懂的概念?看似複雜的邏輯?跟枕頭同樣厚的教科書?我不知道你是怎麼想的,反正大學裏面的數字電路這門課給個人印象就是這樣,固然,我對這門課毫無興趣。但是當我看完這本書的時候,我才發現,原來數字電路不是用來死記硬背的,複雜的邏輯徹底能夠從簡單的邏輯入手推導過來。做者用導線,電燈泡,開關,這3個家喻戶曉的東西拼裝出一個個功能各異的元器件,而後再把元器件橫向拼裝成更復雜的器件,因此整本書的知識結構很是有層次感,在按部就班的學習過程當中,你會以爲一些本來認爲複雜難懂的東西是這樣「理所固然的簡單」。更好玩的是,你徹底能夠把書上介紹的電路實現一遍,好比去作個內存,甚至cpu出來,你不須要去買二極管,電路板,電焊鐵,焊錫絲等等這些工具,只須要下載個《minecraft》(中文名《個人世界》)遊戲就行,這是一款模擬現實世界的沙盒遊戲,你千萬不要被這遊戲的低像素給嚇跑了,耐心點,你會發現裏面有「紅石」,「中繼器」,「開關」等等元素,你能夠用它們模擬出現實中的電路。我當初就在遊戲裏面實現了一個8位加法器,以下圖所示。編程
這就是輸入端了,那9個開關看見沒?他能夠輸入0,1(最右邊的開關是控制進位的),而紅色的一條條的就是「導線了」。工具
這是輸出端,最左邊這位是溢出位,右邊8位正常輸出,若是石頭上面的「火柴」同樣的東西亮了,就代表輸出是1。學習
那天晚上花了很長時間才作完這個加法器,這時看到遠處太陽升起來,感受特別美呢!編碼
這是別人作的計算器。spa
《彙編語言》不是列舉一堆的彙編指令,告訴你每一個指令該怎麼用,事實上這是一本指令手冊該作的事情。咱們知道機器指令(彙編語言和編譯器的產物)是和相應的cpu綁定在一塊兒的,而做者挑選告終構簡單的8086cpu,經過講解某些關鍵指令來深刻理解機器工做的基本原理,讓讀者有底層編程的體驗。有意思的是,書裏面提的不少問題以及實驗都很「邊界」,換句話說,就是能很好的考察你到底有沒有真的理解。另外,書裏面講解的不少概念,都是操做系統的基礎。操作系統
《30天自制操做系統》,看到這種N天學會xxx的書,出自本能的反應就是嗤之以鼻,是的,實際上咱們很難在30天搞定,但30天不是重點。關鍵是這本書從0開始到一個完整的操做系統每一步都有源代碼,也就是說你徹底能夠跟着一塊兒敲代碼,最後也能作出一個操做系統來,很是具備可操做性。事實上,我以爲最牛逼的「hello word」就是在機器通電後直接在屏幕上顯示「hello world」。3d
這幾本書都有一個共性,在傳授知識的方式上面頗有技巧,他們經過知識屏蔽,按部就班,類比等方式讓一個個複雜的原理變的天然,看的過程當中很容易領悟,也頗有快感。相反,不恰當的表達方式,徹底能夠作到把一我的的興趣扼殺在搖籃裏,好比某些大學的教材。blog