汇编书籍PGUBook

《Programming Ground Up》(下面简称PGUBook)是一本使用GFDL协议发布的书。我是从TualatriX的博客上看到的关于这本书的介绍的。

PGUBook从汇编开始讲编程,但是绝不仅仅在于汇编,而是重于编程思想。书的前面大部分都是围绕汇编在讲,后面则有一部分讲C语言和其他。本来我以为这本书讲汇编一定不会勾起我的兴趣的,不料粗略浏览一看,发现PGUBook讲的比我大二的时候学的汇编要深刻很多。这本书只讨论x86和Linux,一方面使我对x86的理解深刻了不少,另外也使我有充分的环境去实现书上的例子。书的封面截图在下面,更详细的介绍可以看它的官方主页http://savannah.nongnu.org/projects/pgubook/

PGUBook
PGUBook

我看了PGUBook半个多月来,到今天整整看了五章了,感觉是越看越想看。主要原因是正如它第一章里所说的,没有把一些其他书回避的晦涩的地方一带而过,而是用比较好的章节结构使读者逐步去掌握一些x86的设计理念。而且看了PGUBook之后,对C语言的很多行为的理解有了很大提高,比如说调用函数时怎样压栈,Linux下gcc是倒序把参数压栈,所以函数中的相关参数怎样影响就可以很好理解了,比如f(a++, a++)之类的。当然其他编译器处理手段会一样,而且也不符合C语言规范,我只是想用来说明有助于理解。

接下来几周陆续写上读书笔记和小结,这次先把x86的简要架构写上。

32位的x86有6个通用寄存器和4个特殊寄存器,以前学的时候感受没这么深刻,现在倒是很容易就记下来。6个通用寄存器分别是:%eax(累加寄存器),%ebx(基本),%ecx(计数),%edx(数据),%esi(源索引),%edi(目的索引)。不过其实对于32位的x86来说,其实它们都是通用的,可以代替对方,那些括号里的含义在16位的时代才比较有意义。另外四个特殊寄存器是:%esp,栈寄存器,指向目前的栈顶;%ebp,基址寄存器,常和%edi组合使用;%eip,指向下一条指令的地址;%eflags,标志寄存器,对比较指令特有用。

寒假过一半前希望能把PGUBook看完一次。

秋天无题

这个星期虽然也获得很多新的信息,但是还是以无题写一写杂事好了。

首先是今天终于获得一本英文版的《Computer Networks》,作者是著名的Andrew S. Tanenbaum。这本书是计算机网络的经典书籍,说它为这方面书籍的经典第一位也不为过。可能也是这一阵子真的很喜欢经典书,《The C Programming Language》已经看完第三章了,有空的时候就在网上搜索。后来得知网络书中有两本比较经典的,一本就是我一开始说的那本,电子版也拿到了,后来想了想,好像某个同学的教材正是这本,那我连打印都不用,实在太好了,万分感谢那位同学。

Computer Networks

另一本经典书是《Internetwork with TCP/IP》,作者是Douglas E.Comer。这两本书并不冲突,后者基本是围绕TCP/IP讲了几乎所有的技术,不过可惜的是我到现在还找不到那本书的电子版。好在,这本书在中国有影印版,估计到时会买来看的。

说说这个星期的互联网趣事吧,谈谈我不熟悉的微软,但是好奇使我决定注册了live.cn。从此,我有一个全新的Live ID,以后估计也是会用上MSN的,而且我又多了一个5GB的邮箱。

Live CN

之所以无题,确实是有点心烦的事。工作上遇到一点阻力,希望汲取教训和经验,而这件事也可以快点变顺利。