题记不但能够凸显文章的主旨,激发读者的兴趣,而且能起到先声夺人的效果,恰如其分的题记还能够用来帮助读者测试自己是否把握到了章节大意:如果看完以后发出灿然的会心一笑,就表示懂了 : P。

比如 COD 这本书。举几个例子:

在巴黎当我对当地人说法语时他们只是瞪着我;我从来也没能成功地让这些白痴明白他们自己的语言。

——马克·吐温,《异乡奇遇》,1869

章节:1.2 程序的表象之下

引文:The Innocents Abroad 里的经典桥段,巴黎人坚决在各种场合下不讲英语只讲法语好像是出了名的,马克·吐温忍不住讽刺一下。还有一种说法是,如果你和巴黎讲法语,如果口音不标准,即便内容没错,巴黎人也会假装听不懂。

解释:程序在运行前,必须经历一个从高级语言到低级语言的转化的过程,如果你对一台计算机说“高级语言”,它就会傻瞪着你。


我认为“计算机”就像书,是一个广泛应用的概念。不过我一度没想到它会发展得如此之快,因为我没有想到我们已经可以在一个芯片中能提供那么多的部件。晶体管出乎意料地向前发展。一切都发展得比我们想象的快得多。

——J.Presper Eckert,ENIAC的发明者之一,在 1991 年的讲话

章节:1.4 实例:制造 Pentium 4 芯片

解释:暗示计算机的高速发展很大程序上归功于晶体管(超大规模集成电路)的发展,它不仅仅会影响芯片制造的成本,还影响了设计者的决策。


此处……ENIAC 配置有 18000 个真空管,重 30 吨,未来的计算机可能有 1000 个真空管,重量只有 1.5 吨。

——美国《大众机械》,1949 年 3 月

章节:1.6 结论

解释:预言未来其实是一件很难的事情。如果想看到未来的发展,则必须对现在有着深刻的认识,而不仅仅停留在一些数字上。这里作者还提到人们在设计系统时往往会分层设计,但分层并不意味着处于某一层的设计者可以不去理解其他层次,比如设计处理器的人就需要非常熟悉编译器和硅。


我对上帝说西班牙语, 对女人说意大利语, 对男人说法语, 对我的马说德语。

 ——查理五世,法国国王(1337~1380)

章节:第2章 计算机指令

引文:查理五世乃神圣罗马帝国的主人,在位期间统治了大半个欧洲,所以会的语言多并不稀奇。在提到的几种语言中,西班牙语最接近拉丁语,被誉为最接近上帝的语言;意大利语缠绵悱恻,适合当情话;法语比较严谨,用来在正式场合同别的男人谈判;至于和马说德语嘛,可能是因为鼻音比较重吧。

解释:联系下文,这段强调了设计指令集时要有很强的目的性,而这个目标就是——硬件好实现、编译器好写。


“正相反,”叮当弟接着说,“如果那是真的,那它就可能是真的;如果那曾经是真的,它就是真的过,但是既然现在它不是真的,那么现在它就是假的。这就是逻辑。”

——Lewis Carroll,爱丽斯漫游仙境,1865

章节:2.5 逻辑运算

引文:叮当弟是《爱丽丝漫游仙境》人物角色叮当兄弟中的弟弟,这对兄弟说话颠三倒四,有点像《笑傲江湖》里的桃谷六仙。

解释:叮当弟想表达的应该就是 ~1 = 0 吧。


自动化计算机的实用性取决于循环使用一个给定指令序列的可能度,其循环次数依赖于计算结果。当这种循环结束后,必须接跟一个不同的[指令]序列,因此,大多数情况下,必须给出两个并行的[指令]序列,并且在此之前,用一条指令来决定选用上述两个指令序列中的哪一个。可根据数据的符号位来做出选择(0被及其认为是正数)。因此,我们引入一条依赖于给定数据的符号的[指令](条件转移[指令]),这条[指令]从两条路径中选择正确的路径执行。

——Burks,Goldstine 和冯·诺伊曼,1947

章节:2.6 分支指令

解释:今天大部分机器(除了ARM)在处理分支时都沿用了这种思想:根据某个数据的值选择两条路径中的一条执行。估计这篇文章这应该是该思想最早的出处。


!( @ =>

(wow open tab at bar is great)

——键盘诗“Hatless Atlas”的第4行,1991 (一些对ASCII字符的命名:“!”是wow,“(”是open,“ ”是bar,等等)

章节:2.8 人机交互

引文: 全文在这里

解释: ASCII 码和人机交互有什么关系?计算机除了数值计算之外还有一个很重要的用途:文字处理。如果说 int 和 float 是为了把 0101 解释成数值,那么 ASCII 码就是把 0101 解释成英文字符的方法。这里纯粹是为了引出字符编码,例子也可以理解为用自然语言来解释符号。


情人眼里出西施。

——Margaret Wolfe Hungerford,Molly Bawn,1877

章节:2.16 实例:IA-32 指令

解释:这一节介绍了 IA-32 这个成功但是不讨人喜欢的指令集:IA-32 的成功是市场而非技术上的成功。“情人眼里出西施”很好地诠释 IA-32 除了在 Intel 的眼睛里,在学术圈和工业界的地方恐怕更多地只能用来作为一个反面教材,而且就连 Intel 的人也不得不承认它“丑”的一面。


减法:加法的淘气伙伴。

——一家足球工厂训练运动员的十大课程之一,David Letterman et al.,Book of Top Ten List

章节:3.3 加法与减法

引文:其他课程有:阅读经典(看《红楼梦》前 30 页)、制作三明治、法律课(各州最低合法性交年龄)、方文山诗歌……

解释:这个太贴切了,机器可以用先求补再相加的方法来实现减法。


如果方向不对,再快也没用。

——美国谚语

章节:3.6 浮点运算

解释:暗示精度对计算机的重要性和速度一样重要。如果计算机的运算结果和真实的计算结果差了很远,那即使工作得再块也没有意义,因此精度必须控制在一定的范围内。程序员需要铭记的是,始终有一些数是无法用有限的机器字长精确表示的。


决不放弃,决不放弃,绝不,绝不,绝不——在贫穷,伟大或渺小,重要或次要之时——决不放弃。

——Winston Churchill,在 Harrow School 的演讲,1941,Abroad,1869   

章节:3.11 习题

解释:唯一可能的解释就是这章的习题太容易让人放弃了。


时间揭示真理。

——seneca

章节:第4章 评估和理解性能

解释:衡量系统的指标不是 IPC,不是主频,而是一个程序的运行时间。


永远不要浪费时间。

——美国谚语   

章节:6.1 流水线概述

解释:在处理器中使用流水线,和干洗店使用流水线的理由是一致的,本质都是不要让资源闲下来。


你是什么意思?为什么一定要建?这是一个旁路,你总是会需要旁路的。

——Douglas Adams,Hitchhikers Guide to the Galaxy,1970

章节:6.4 数据冒险与转发

解释:旁路(bypass)本来就挺形象的,作者 geek 的身份暴露无疑。


如果开始你没能取得成功,那么请重新定义什么叫成功。

——佚名   

章节:6.5 数据冒险与阻塞

解释:通过在流水线中引入气泡就能解决数据冒险(data hazard)。


智慧十分之九体现在明知得及时。

——美国谚语

章节:6.12 结论

解释:这个地方作者为了指出流水线和多发射技术虽然开发出了指令流中的并行性,但并没有减小指令延时(吞吐量和延时的延时是两码事)。


高速缓存:一个隐藏或者存储东西的地方。

——Webster’s New World Dictionary of the American Language,Third College Edition(1988)

章节:7.2 高速缓存基础知识

解释:Cache 本来有保险箱的意思。


“穿过月亮的高山,

沿着影子的山谷,

飞驰,大胆地飞驰”

影子回应说,——

“但愿你找到了黄金国!”

——埃德加·爱伦·坡,“Eldorado”,第4节,1849

章节:9.1 概述

解释:顾名思义黄金国就是一个满地宝藏但却又遥不可及的理想国,而计算机设计者们的黄金国就是“多处理器”。


畏首畏尾将无法体会到自由言论和集会的压力。

——Louis Brandeis,Whitney v.California,1927

章节:附录A 汇编器,连接器和 SPIM 模拟器

解释:难道是因为集会和汇编在英文里是一个单词(assembly)?


RISC:1985年后公布的所有计算机。

章节:附录D 桌面计算机、服务器和嵌入式计算机上的RISC体系结构综述

解释:作者就是 RISC 的始作俑者。