计算机硬件及组成原理
作者 : Arnold S. Berger
译者 : 吴为民 喻文健 邓澍军 伍绍贺
丛书名 : 计算机科学丛书
出版日期 : 2007-05-29
ISBN : 7-111-21018-4
定价 : 55.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 390
开本 : 16开
原书名 : Hardware and Computer Organization: The Software Perspective
原出版社: Elsevier
属性分类: 教材
包含CD :
绝版 :
图书简介

本书从实用角度详细介绍了现代微处理器的体系结构,旨在为读者揭开现代嵌入式计算机系统和PC机的神秘面纱,帮助读者了解这些在日常生活中已经无处不在的复杂机器。书中解释了硬件和软件如何协同作用来完成现实世界中的各项任务。
  与其他类似简单演示如何设计计算机硬件的图书不同,本书从软件开发者的角度出发,全面分析了整个计算机,重点讲解了计算机的优势和弱点,解释了如何处理存储器问题,如何写出能直接与底层硬件交互并充分利用底层硬件的高效汇编代码。
  此外,本书还介绍了从简单的嵌入式应用的8位微处理器转向PC和工作站工作时应如何进行决策,这在同类图书中独树一帜。同时,书中还阐明了代码行为和机器操作之间的联系,以帮助读者更好地理解计算机在速度和资源方面的局限性。

  本书特点:
  ● 采用目前最常见的三种计算机体系结构作为示例:Freescale 68000 、Intel i86和ARMv3;
  ● 内容讲解非常直观——书中包含多种简图和图表;
  ● 汇聚作者在业界多年的实际经验和敏锐的洞察力。

  本书附带光盘内容包括:
  ● 业界多位知名专家关于硬件设计和开发的11个视频讲座;
  ● 课件使用的幻灯片;
  ● 三种示例体系结构的指令系统仿真器。

图书特色

图书前言

谢谢你购买我的书。我希望你发现本书内容充实且易读,至少,当我着手写这本书时,这是我的目标之一。
  本书是我一直在Washington-Bothell大学计算与软件系统系所教授的课程的成果。该课程(CSS 422),即“硬件和计算机组成”(Hardware and Computer Organization),是我系本科学生必修的核心课程之一,也是我系课程表中唯一必修的体系结构课程。当我们的学生在学习算法和数据结构、相关的语言、数值方法以及操作系统时,这是他们唯一一次接触到这些知识外壳下真实的原理。由于华盛顿大学是一学年四学期制,所以我就面临着这样一个艰难的挑战:要在10周左右的时间内讲授尽可能多的计算机体系结构的知识。
  本书核心的材料是用5年多的时间制成的大约500张Microsoft PowerPoint幻灯片。后来,我将幻灯片中的材料转换成了HTML,这样我就也能通过远程教育(DL)的形式讲授课程了。自从1999年秋首次讲授该课程,我每个学年都要讲上3~4遍。我还通过DL讲授了3次,取得了很好的效果。事实上,DL学生在总体上与在课堂听讲的学生做得一样好,因此,如果你觉得没有时间选修这门课,那么可以用本书来自学这门课程。
  本书适合作为从二年级到四年级中在计算机体系结构方面的第一门课。本书相当地独立,所以应该能成为计算机系学生所需学习的唯一硬件课程,掌握了这门课程就能理解他们所编写的代码的涵义。在Washington-Bothell大学(UWB),这门课程主要是讲授给四年级学生的。作为教员我们发现,通过在其他课程中学习编程概念,达到一定的熟练程度,有助于学生轻松地转向学习低级编程技术。如果本书用于低年级学生,就需要分配额外的时间来熟练掌握汇编语言的编程概念。例如:在介绍某些汇编语言分支和循环结构时,高年级学生很容易掌握这些结构与WHILE、DO-WHILE、FOR及IF-THEN-ELSE结构的相似性,但低年级学生则可能需要更多具体的例子来领会这种相似性。
  为什么要写一本关于计算机体系结构的书?在讲授该课程的5年多时间中,我曾4次更换教材。在学期末,当我主持一个非正式的课程听取学生汇报时,他们严厉地批评了我使用过的每本书。几乎每个计算机科学系的学生在体系结构课堂上使用的标准教材都与他们的需要无关。这些学生中的绝大多数在研究生阶段都不会继续学习体系结构,也不会为Intel或AMD 设计计算机。因此,他们需要的是理解计算机体系结构及其支撑硬件,以便于编写能在机器上运行的高效的、无缺陷的代码。最近,我确实发现一本教材,至少以我认为应该的方式接近了主题内容,但是我发现该教材仍在几个关键的领域存在不足。从正面看,换成新的教材确实能消除来自学生的抱怨,同时也强化了我的这个观点:并不只我一个人看到了对具有不同视角的教材的需求。遗憾的是,这个教材尽管是一个重大的改进,但仍没有涵盖我认为非常重要的几个领域,因此我下决心写一本教材,本教材确实是以新视角写成的,且没有损失我认为的精髓。
  由于UMB校园距华盛顿州Redmond的微软总部不到10英里,所以我们受到了微软文化的强烈影响,这并不奇怪。我的大部分学生只为Windows和Intel体系结构写程序,该体系结构的设计者会让你相信这些计算机是无限快的机器,有无穷的资源。你如何反驳这种观点?
  我的学生经常带有挫折感地抱怨,“为什么你要我学这些?”这种情况通常都会发生在期中考试前后。由于我们的校园与波音公司建造737、757飞机的地点华盛顿州Renton和建造宽体767、777飞机的地点华盛顿州Everett大致等距离,用飞机工业做类比通常非常有效,因此我用这个例子简单地回答了他们的问题:“你愿意乘坐一个由某个对飞行原理毫无所知的人设计的飞机吗?”有时这种反问式的回答会很奏效。
  本书分为4个主要的主题领域:
  1. 硬件和异步逻辑介绍。
  2. 同步逻辑、状态机和存储器组织。
  3. 现代计算机体系结构和汇编语言编程。
  4. 输入/输出、计算机性能、存储器层次,以及计算机组成的未来发展方向。
  这些主题领域之间没有明确的界限划分,而且后面章节的主题材料是建立在前面章节的知识基础之上的。然而,我已力图限制这种相互依赖的关系,因此后面的章节可以根据时间和教学提纲的要求进行取舍。
  每章末尾都有一些习题,其中奇数号习题的答案位于附录中,偶数号习题的答案则可通过教师资源网址http://textbooks.elsevier.com/0750678860得到。
  我们在课本中采取了由下而上的方法描述硬件。正如遗传学家用仅包含腺嘌呤、胞嘧啶、鸟嘌呤、胸腺嘧啶(分别简写为A、C、G、T)4种核苷酸的DNA分子就能描述最复杂的有机生命一样,我们用与门(AND)、或门(OR)、非门(NOT)、三态门(TRI-STATE)这4种逻辑构件块就能描述最复杂的计算机或存储系统。严格地说,三态门不是一个类似于与门的逻辑构件块,它更像“粘结剂”,使我们能以某种方式将计算机元件互连,从而避免过高的复杂性。而且,我确实喜欢DNA这个类比,所以我们需要用4个电子构件块与A、C、G、T相类比。
  我曾经给一组中学教师做过一个报告,这些教师那时正努力地想在夏季休息期间修一些在职学分。当我为惠普公司的逻辑系统部门工作时,我还是位于科罗拉多Springs的空军学院校区的志愿者。这些教师中没有一个懂计算机,我要用两个小时教给他们这门技术的一些感性知识。我决定从亚里士多德和作为哲学分支的逻辑操作符开始讲解,然后用DNA做类比继续介绍寄存器概念。我似乎正逐渐让他们听懂,但他们却总在打击我的自信心,使我想在他们的点名册上签字解约。无论如何,我认为表明这样的事实是有价值的:即使是最复杂的计算机功能,也能用我们在本书第一部分所介绍的基本逻辑单元来描述。
  我们将采用DNA或构件块方法贯穿于本书前半部分中的大部分。我们将从最简单的门开始,构建复合门,再从这些复合门开始,进一步提出和求解异步逻辑方程。我们将学习用布尔代数和卡诺图(Karnaugh Map, K-map)进行真值表设计和化简的方法。习题和实例强调的是将问题用一组规范化描述来陈述,然后转化为一个真值表,再由真值表转化为卡诺图,最后转化为门设计。此时,要鼓励学生使用随书带的DVD光盘中的Digital Works软件模拟器(见下文)在模拟中实际地“构建”电路。我发现这种把抽象设计和实际模拟相结合是一个极好的教学方法。
采用这个方法的好处之一是能使学生们逐渐习惯于在二进制位一级和变量打交道。虽然大多数学生熟悉C/C++的布尔结构,但是一条承载一个变量状态的线对他们来说还是相当新的概念。
  介绍了建立任意复杂的异步代数函数的思想之后,我们就加入时钟和同步逻辑的概念。同步逻辑包括触发器、计数器、移位器、寄存器以及状态机。我们在该领域实际付出了很多努力,在稍后讲到微代码和指令分解时,还要将这些概念重新介绍几次。
  本书的中间部分着重介绍计算机系统的体系结构。尤其是,我们会非常关注存储器到CPU的接口。我们将利用在前面章节学到的知识设计简单的存储器系统和译码电路。我们还简要考察了存储器定时,以便于更好地理解系统设计的一些更全局化的问题。
  接下来我们将转而介绍68K、ARM以及x86处理器系列的体系结构,这同时也将是对汇编语言编程的介绍。
  每种处理器体系结构都单独讲解,以使读者可跳过某种结构的介绍而不会产生过多的不连贯性。
  本书确实在三个体系结构中都强调了汇编语言编程,其原因有两个方面:首先,汇编语言不一定是作为课程表的一部分为计算机科学系学生讲授的,故这可能是他们在机器级接触编程的唯一机会。即使你作为计算机系的学生可能从不需要编写汇编语言程序,你也很有可能要在汇编语言级来调试C++程序的某些部分,因此,这是一个很好的学习机会。而且,通过考察这三个截然不同的指令集,我们将实际强化这种观念:一旦你理解了一种处理器的体系结构,你就能用汇编语言对其进行编程,这就引出了学习汇编语言的第二个原因。汇编语言是从软件开发者的角度学习计算机体系结构的一个很好的出发点。
  我是“赛博士”(Dr. Science)的一个狂热爱好者,他经常出现在国家无线广播电台中,并在大学校园中巡回演讲,他的著名时髦语是:“我在某某学科具有硕士学位。”不过,我在赛博士的讲座上听到这样一句话:“我喜欢审视一列列的随机数字,并从中发现模式。”我记住了这句话,并经常用在我的课堂上,以描述如何能够通过看起来很随机的机器语言指令集来逐渐领会计算机体系结构。我只能想像一群摩托罗拉的CPU设计师和工程师围坐在餐馆的桌旁,桌子上的比萨饼盘子散布在各处,他们正试图为最后几条指令计算出正确的位模式,以避免得到一个膨胀的、无效率的微代码ROM表。如果你是一个学生,并且读到这里还没有任何感觉,那么也不要着急。
  本书最后一部分又返回来重新考察了计算机体系结构的一般问题。我们将考察CISC与RISC,以及诸如流水线、高速缓存、虚拟存储器和存储器管理等这些现代技术。然而,最重要的主题还是计算机性能,我们将不断地返回到有关软件到硬件接口、编码方法和硬件之间的相互影响等问题上来。
  本书的一个独特之处在于随书所附的DVD光盘中的材料,其中包含了下列程序,用来与本书配合使用:
  ·Digital Works(免费软件):一个硬件设计和模拟工具。
  ·Easy68k:一个汇编器/模拟器/调试器免费软件包,用于摩托罗拉(现在免费级别的)68 000体系结构。
  ·x86emul:一个汇编器/模拟器/调试器共享软件包,用于x86体系结构。
  ·GNU ARM工具:ARM开发者工具箱,带有来自自由软件基金会(Free  Software Foundation)的指令集模拟器。
  ·来自11位业界专家的关于硬件设计和开发方面重要主题的视频讲座。
  ARM公司有一个极好的工具套件,你可直接从ARM获得。它带有一个免费45天的评估许可证,这对于我们的课程来讲应该足够用了。遗憾的是,我未能通过谈判与ARM公司达成一个许可证协议,使我能将这些ARM工具包含在随书的DVD光盘中。该工具套件极为优秀和易用。如果你想花费一些额外的时间来考察世界上最流行的RISC体系结构,那么就直接和ARM公司联系,友好地寻求ARM套件的拷贝吧。告诉他们是我让你这样做的。
  我还在CSS 422课上广泛地采用了Easy68K汇编器/模拟器。它性能良好,并附有很多调试功能。而且,由于它是免费软件,所以无需考虑许可证和评估期限这些后顾之忧。然而,我们还要对本书中的其他工具做一些引用,因此,最好在你打算使用时再安装它们,而不是在课程开始时就安装它们,这也许是一个好主意。
DVD光盘包括的11个视频讲座,内容与本书各种主题相关,演讲者来自于计算机体系结构领域的专家。这些视频文件是在2004年UWB的沃辛顿技术捐赠基金提供的资助下制作的。每个讲座都是15到30分钟的技术讲解。我希望你花时间看一下,并将它们融汇到相关主题的学习过程中。
  虽然编辑、我的学生们以及我本人都已将本书读过几遍了,但据墨菲法则的预言,本书还有存在错误的巨大可能性,因为毕竟它是软件。因此,如果你在本书中看到错误,那么请告诉我,并将你的意见发送到: aberger@u.washington.edu。我将保证这些修正意见能在我的华盛顿大学的网站(http://faculty.uwb.edu/aberger)上张贴出来。
  最后一点我想说的是,课本只能做到这样。无论你是正在读本书的学生还是老师,请尽量寻找专家和原始资源。James Patterson教授在2004年7月期的《physics Today》(今日物理)中写到:
  当我们想了解某件事物时,总有一种想在课本中快速寻求答案的倾向。这常常是奏效的,但我们需要养成查看原始论文的习惯。因为课本上的内容通常是把事实经过二次或三次简化而来……
   让我们开始吧。

   Arnold S. Berger
  Sammamish, 华盛顿

封底文字

本书从实用角度详细介绍了现代微处理器的体系结构,旨在为读者揭开现代嵌入式计算机系统和PC机的神秘面纱,帮助读者了解这些在日常生活中已经无处不在的复杂机器。书中解释了硬件和软件如何协同作用来完成现实世界中的各项任务。 与其他类似简单演示如何设计计算机硬件的图书不同,本书从软件开发者的角度出发,全面分析了整个计算机,重点讲解了计算机的优势和弱点,解释了如何处理存储器问题,如何写出能直接与底层硬件交互并充分利用底层硬件的高效汇编代码。 此外,本书还介绍了从简单的嵌入式应用的8位微处理器转向PC和工作站工作时应如何进行决策,这在同类图书中独树一帜。同时,书中还阐明了代码行为和机器操作之间的联系,以帮助读者更好地理解计算机在速度和资源方面的局限性。 本书特点: ● 采用目前最常见的三种计算机体系结构作为示例:Freescale 68000 、Intel i86和ARMv3; ● 内容讲解非常直观——书中包含多种简图和图表; ● 汇聚作者在业界多年的实际经验和敏锐的洞察力。 本书附带光盘内容包括: ● 业界多位知名专家关于硬件设计和开发的11个视频讲座; ● 课件使用的幻灯片; ● 三种示例体系结构的指令系统仿真器。

图书序言

Arnold S. Berger 是华盛顿-波泰尔(Washington-Bothell)大学计算和软件系统系的高级讲师,拥有康奈尔大学的学士和博士学位。Berger博士曾担任Applied Microsystems公司研发部门的主管、Advanced Micro Devices公司嵌入式工具的营销经理和惠普公司的研发项目经理。Berger博士已发表了40多篇关于嵌入式系统的论文,持有三项专利,并且是畅销书《Embedded Systems Design: An Introduction to Processes, Tools and Techniques》的作者。

作者简介

Arnold S. Berger:Arnold S. Berger:  Arnold S. Berger Washington-Bothell大学计算和软件系统系的高级讲师,拥有康奈尔大学的学士和博士学位。Berger博士曾担任Applied Microsystems公司研发部门的主管、Advanced Micro Devices公司嵌入式工具的营销经理和惠普公司的研发项目经理。Berger博士已发表了40多篇关于嵌入式系统的论文,持有三项专利,并是畅销书《Embedded Systems Design: An Introduction to Processes, Tools and Techniques》的作者。

译者简介

吴为民 喻文健 邓澍军 伍绍贺:暂无简介

译者序

展现在您面前的是这样一本书:它讲的是计算机硬件和体系结构的问题,而且也确实覆盖了这个领域的几乎所有内容,但是,即使是对计算机硬件知识知之甚少的人也能看懂它并从中受益。因为本书是从软件这个视角来介绍计算机体系结构的。
  一个软件设计者,如果对其要编程的硬件和体系结构的知识缺乏了解,就失去了很多提高软件性能的手段。然而,要让他们去系统地学习计算机体系结构的知识,再运用这些知识来提高软件性能,则存在一定的困难。因为现今的教科书大都是针对学习体系结构的人而编写的,所以这些教材基本上都是力图完整系统地传授体系结构知识的,并没有考虑一个软件设计者如何利用体系结构的特点设计出高性能的程序。也就是说,对于计算机体系结构,软件开发者在掌握知识和运用知识之间存在着一个鸿沟,本书出现的意义就是填补了这个鸿沟。
  本书的讲授风格有别于一般的教科书,它的讲解不是刻板的,而是以一种轻松和诙谐的口吻进行的,就像课堂授课录音的书面记录,读者可以自然地跟进而不会感到疲倦。书中的内容丰富并配有大量的实例,每章后面还有习题并提供了答案(书后和网上)。本书的作者具有丰富的实践经验和教学经验,读者在阅读本书的过程中随处都能体会到。
  本书的翻译是4位译者共同努力的结果,其中,吴为民翻译了序言及第1、5、6、7、9、12、15、16章,喻文健翻译了第2、3、4章,邓澍军翻译了第8、10、11章,伍绍贺翻译了第13、14章。最后由吴为民统一校对定稿。对于书中出现的术语,我们基本是按最常用的译法和具体情况进行取舍的。对于原书中出现的错误,我们也完全按照其网站上发布的勘误表进行了改正。尽管如此,疏漏在所难免,我们欢迎和感谢来自读者的任何批评指正。

  译者于清华园
  2007年1月

图书目录

出版者的话
专家指导委员会
译者序
前言
致谢
第1章 硬件体系结构简介 1
1.1 引言 1
1.2 计算技术简史 1
1.3 数制 9
1.4 将十进制数转换为各种基数的数 20
1.5 工程符号 21
总结 22
参考文献 22
习题 22
第2章 数字逻辑简介 24
2.1 引言 24
2.2 电子门描述 32
2.3 真值表 36
总结 38
参考文献 38
习题 38
第3章 异步逻辑简介 40
3.1 引言 40
3.2 布尔代数定律 41
3.3 卡诺图 45
3.4 时钟和脉冲 50
总结 55
参考文献 55
习题 55
第4章 同步逻辑简介 58
4.1 引言 58
4.2 触发器 59
4.3 存储寄存器 68
总结 74
参考文献 75
习题 75
第5章 状态机简介 79
5.1 引言 79
5.2 现代硬件设计方法 96
总结 98
参考文献 98
习题 99
第6章 总线组织和存储器设计 103
6.1 总线组织 103
6.2 地址空间 115
6.3 直接存储器访问 128
总结 129
参考文献 130
习题 130
第7章 存储器组织和汇编语言编程 134
7.1 引言 134
7.2 标号 143
7.3 有效地址 147
7.4 伪操作代码 154
7.5 数据存储伪指令 155
7.6 汇编语言程序的分析 156
总结 158
参考文献 158
习题 158
第8章 汇编语言程序设计 162
8.1 引言 162
8.2 汇编语言和C++ 175
8.3 堆栈和子程序 180
总结 186
参考文献 186
习题 186
第9章 高级汇编语言编程 192
9.1 引言 192
9.2 高级寻址模式 192
9.3 68000指令 194
9.4 移动指令 195
9.5 逻辑指令 195
9.6 其他逻辑指令 196
9.7 68000指令总结 199
9.8 用TRAP#15指令模拟I/O 201
9.9 编译器和汇编器 203
总结 216
参考文献 216
习题 216
第10章 Intel x86体系结构 220
10.1 引言 220
10.2 8086 CPU的体系结构 221
10.3 数据寄存器、变址寄存器和指针寄存器 223
10.4 标志寄存器 226
10.5 段寄存器 226
10.6 指令指针(IP) 226
10.7 存储器寻址模式 228
10.8 x86指令格式 231
10.9 8086指令集总结 233
10.10 数据传送指令 234
10.11 算术指令 235
10.12 逻辑指令 235
10.13 字符串操作 236
10.14 控制转移 237
10.15 8086体系结构的汇编语言程序设计 239
10.16 系统向量 241
10.17 系统启动 241
总结 241
参考文献 242
习题 242
第11章 ARM体系结构 244
11.1 引言 244
11.2 ARM体系结构简介 245
11.3 条件执行 249
11.4 桶式移位器 250
11.5 操作数大小 250
11.6 寻址模式 251
11.7 堆栈操作 253
11.8 ARM指令集 255
11.9 ARM系统向量 263
总结 264
参考文献 264
习题 265
第12章 与外部接口 266
12.1 引言 266
12.2 中断 267
12.3 异常 270
12.4 Motorola 68K的中断 270
12.5 模数(A/D)转换和数模(D/A)转换 274
12.6 A/D和D/A转换器的分辨率 286
总结 288
参考文献 288
习题 288
第13章 现代计算机体系结构简介 292
13.1 处理器体系结构,CISC、RISC及DSP 293
13.2 流水线简介 296
总结 305
参考文献 305
习题 306
第14章 存储器、高速缓存和虚拟存储器 308
14.1 高速缓存简介 308
14.2 虚拟存储器 321
14.3 页 323
14.4 转换旁路缓冲器(TLB) 324
14.5 保护 325
总结 326
参考文献 327
习题 327
第15章 计算机体系结构的性能问题 329
15.1 引言 329
15.2 硬件和性能 329
15.3 最佳习惯 342
总结 343
参考文献 344
习题 344
第16章 未来发展趋势与可重构硬件 346
16.1 引言 346
16.2 可重构硬件 346
16.3 分子计算 354
16.4 局部时钟 355
总结 358
参考文献 358
习题 358
附录 奇数号习题答案 360
索引 382

教学资源推荐
作者: 袁春风,朱光辉,余子濠
作者: David E.Simon
参考读物推荐
作者: NVIDIA 技术服务(北京)有限公司 著
作者: 刘火良 杨森 编著
作者: (美)Sun Microsystems, Inc
作者: Mark Artiges等