计算机底层的原理很复杂,可以把这些复杂的知识用准确,生动,通俗易懂,且具有可操做性的方式写成文字的做者真的很了不得,而我这就有几本这样的书推荐给你们,它们分别是《编码-隐匿在计算机软硬件背后的语言》([ 美]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