本书特点

汇编语言和计算机体系结构都是难学的课程。传统的汇编语言是如此复杂和特别,以至于即使学习基本概念都可能是一项困难任务。计算机体系结构也有同样的问题,而且更严重。学习汇编语言,我们要研究一个复杂系统;而学习计算机体系结构,则要研究许多复杂系统。

那么怎样才能最有效地学习汇编语言和计算机体系结构呢?本书采用的方法是使用一个简单的计算机模型H1。H1非常容易学习,学生可以迅速用H1完成大量任务。另外,学生可以着重学习重要的系统概念,而不是无关紧要的细节。

使用简单的计算机模型介绍基本概念很难说是一项创新技术。但是,本书以两种创新的方式使用H1模型。第一,H1几乎出现在每一章。结果是连贯的计算机系统的开发,而不是不相关主题的集合。第二,H1不是静态模型,而是有一些学生可以修复的缺陷(事实上是重大缺陷)。H1的缺陷不是本书的缺陷,相反,它们是本书用来使学生参与设计和实现过程的资源。

本书的最重要特点之一是提供大量帮助更好理解的练习。例如,学生可以用C++或Java编写连接器,或者为H1实现一种面向堆栈的体系结构并评估其性能。

因为本书重点在重要的系统概念上面,所以本书为计算机科学和工程领域的高级课程提供了极好的准备。使用本书的学生将具备在高级编程、编译器设计、编程语言设计、操作系统、高级体系结构和计算机工程方面从事重要工作的知识。

H1完美地示范了计算机体系结构和组织的基本方面。但是,它不能示范现代计算机中存在的某些高级功能。因此,笔者在第14~16章增加了关于现代系统的材料。这几章涉及存储系统、RISC、CISC、流水线技术、SPARC、Pentium和JVM(Java虚拟机,Java Virtual Machine)。

书中各章可以以不同顺序讲述,某些章节可以跳过(参见后面的每章前提)。例如,第5章(数字逻辑电路)可以在第1章之后的任何时间讲述,或者跳过;第16章(Java虚拟机)可以在第7章之后的任何时间讲述,或者跳过。

读者对象

本书包括汇编语言与计算机体系结构,可作为一个学期的大学课程。然而,本书同样很适合仅讲述汇编语言或计算机体系结构的课程。因为对硬件和软件的均衡对待,本书适合计算机科学和工程这两个专业。本书还非常适合作为计算机科学专业研究生教学计划的第一门课程,尤其适合那些没有深厚计算机科学或工程背景的学生。

本书前提

尽管使用了C++和Java,但本书的惟一预备知识是C++或Java知识。开始的C++示例非常简单,慢慢才变得越来越复杂,而且都有详细的解释。这种对C++的细致处理,加上C++与Java的相似性,使本书完全适合只熟悉Java的学生。实际上,这样的学生将从本书获得额外好处:几乎不费力的C++入门。如果在某个课程密集的专业内没有C++的空间,则本书将使得在一门课程内包括C++、汇编语言和计算机体系结构成为可能。

尽管对C++的处理是柔和的,但本书仍将详细提供许多对C++的分析,并概述一些编程语言。例如,本书精确展示了对象的实现方法。即使对C++高度熟练的学生也能发现这部分内容的知识性和吸引力。

对于只熟悉C++的学生而言,关于Java的内容不应该有任何问题。第1章给出几个说明浮点误差的Java程序。第4章讨论了可能在Java程序内出现的大小端问题。第8章讨论了Java中的指针和数组。第9章讨论了Java中的布尔运算符。第11章为学生演示了如何用Java(或C++)实现汇编器和连接器。第13章讨论了与JVM有关的堆栈体系结构的某些分支。第16章全部致力于JVM的结构和操作。本书还包括大量同时适合Java和C++的一般材料。已经熟悉Java的学生将获得对该语言更深、更综合的理解。

补充内容

软件包、演讲幻灯片以及其他补充内容可以从Course Technology站点得到,网址是www.brookscole.com。包括问题答案、额外问题、微代码、汇编器和连接器的C++和Java源代码,以及教学建议和教师手册。

软件包运行在Microsoft Windows、Microsoft DOS、SPARC Solaris、X86 Linux和Macintosh OS X上面。对其他平台的支持正在考虑之中。该软件包包括模拟器/源级调试器/仿形器(sim)、汇编器(mas)、连接器(lin)、库程序(lib)、3个用来分析对象以及执行过程和库模块的程序(pic、mex和see)、水平微代码汇编器(has)、垂直微代码汇编器(vas)、伪代码加密器(enc)、几个实用程序、完整文档,以及所有书中的示例程序。sim、mas、has和vas都可以重新配置,以适应新的指令集。

sim支持大量用于跟踪或调试机器语言程序或微代码的命令。特别有用的一个功能是在逐条机器指令的基础上显示微级(microlevel)活动。利用该工具,学生可以清楚地看到与任何一条机器指令相对应的微级活动。

sim可以使用未加密或加密的微代码。该特点使学生可以使用,但不能分析软件包内的加密微代码。在不能参考作者版本的“不利”情况下,学生可以编写自己的版本。

所有软件都使用了简单的命令行界面。命令行界面完全可以满足软件包内的程序类型,而且最易于学习使用。另外,命令行界面不因平台不同而变化。所有程序都可以不带任何命令行参数地被调用(在这种情况下,程序提示输入参数)。因此,我们可以在图形用户界面中方便地通过图标调用它们。

关于使用软件包的指导在书中,这将使学习使用该软件更容易。学生再也不必费力浏览大量文档,而教师也不必再将课堂时间浪费在教学生使用软件上面。完整文档以文件形式包含在软件包中,以供需要的人使用。

每章的预备知识

每章摘要

第1章主要介绍数制。但是,本章没有包括关于进位和溢出标志位以及书中后面需要的关于有符号和无符号比较的某些难点。本章还使用了几个Java程序来说明可能随浮点数发生的各种计算误差。

第2章介绍了H1、机器语言和sim。

第3章介绍汇编语言、汇编器、汇编过程和顺序指令执行的机制。

第4章完成了对H1汇编语言基础的介绍。本章还讨论了可能在Java程序中出现的大小端问题。因为H1非常简单,所以第2~4章需要很少的课堂时间。

第5章介绍数字逻辑电路的基础,这是完整理解H1的内部组织所必需的。另外,本章还介绍了一些重要的电子学原理。第6章依赖本章,但只是最低限度的依赖。因此,如果教师能够在课堂上提供一些逻辑电路的说明,那么可以跳过本章。

第6章给出H1和V1(V1与H1类似,但却是垂直微编程的)的内部组织以及微编程的基本原理。本章以水平和垂直微代码实现了基本指令集,还讨论了硬接线控制。在只讲述汇编语言的课程中,可以跳过本章。

第7、8章是暴露标准指令集缺点的重要两章。通过分析编译器生成的代码,学生将形成良好指令集应该做什么的认识。这两章还给出对C++的有价值的剖析。

第9章在汇编器和C++的级别上,讲述了编程方面的若干高级主题。这些主题包括指向指针的指针、引用调用的潜在错误(是否以显式实现)、值结果调用和可变长变元列表。大多数教师都愿意至少讲述本章的一部分。但是,本章是可以跳过的。

第10章介绍加载和连接机制。本章使用pic、mex和see程序来简化对象、执行过程和库模块的分析,还在汇编器级别上分析了启动代码。

第11章介绍关于实现汇编器和连接器的指导。这两个编程项目此时提供给学生是恰当的。提供的指导适用于C++和Java实现。学生通常喜欢这些项目,并能从中学到很多知识。这些项目提供了宝贵的用Java进行系统编程的机会。大多数教师都将发现,本章需要非常少的课堂讨论。

第12章介绍了最优指令集,这是对标准指令集的改进,它修正了主要在第7、8章暴露的H1的缺点。

第13章测定了最优指令集在支持复杂编程实体和机制方面的表现,比如对象、虚函数和名调用。本章还以乘法为例,讨论了可以配置计算功能的不同级别——电路级、微级和机器级。本章介绍了H1的堆栈指令集,并将其与最优指令集进行比较;还提供了关于实现最优和堆栈指令集的指导(两个值得学生此时做的项目)。

第14章使用H1作为工具,解释了程序重定位的分支,并进一步研究了各种存储系统。这些主题包括分页、命令分页、相联存储器、中断、页布置策略、存储器保护、分段和高速缓冲存储器。

第15章使用SPARC和Pentium论述某些不适合用H1论述的重要主题(如RISC、流水线技术、代码优化)。

第16章以前面介绍C++和H1汇编语言时使用的相同方式介绍了Java和JVM(尽管是以更浓缩的形式)。

致谢

笔者在微级和机器级上对H1和V1的设计,是受到Miles Murdocca和Vincent Heuring所著《计算机体系结构原理》(PrenticeHall,2000)、Vincent Heuring和Harry Jordan所著《计算机系统设计和体系结构》(Addison Wesley Longman,1997),特别是Andrew Tanenbaum所著《结构化计算机组织,(第3版)》(PrenticeHall,1990)等书中类似模型的影响。

编辑过程中的审阅者可能会显著地帮助写成一本更好的书,本书的审阅者就属于这种情况。在手稿的大量修订过程中,他们的介入为笔者提供了必不可少的指导。感谢New Orleans大学的Mahdi Abdelguerfi、New Orleans大学的Ming Hsing Chiu、Western Washington大学的Annie Groeninger、Iona学院的Lubomir Ivanov,以及Georgia Perimeter学院的Gene Sheppard。

笔者还想感谢学生们对手稿早期版本的有益反馈,感谢Vassar学院的John Collier和Brian Chickery在Macintosh方面的帮助,感谢与笔者同系的Andy Pletch在Unix方面的专业知识,感谢Addie Haas的建议和鼓励,感谢Matrix印刷厂的Merrill Peterson协调本书的印刷,并感谢Brooks/Cole出版社的Kallie Swanson在该项目还不成熟时就认识到它的价值。

Anthony J. Dos Reis

more >

java 与 汇编_清华大学出版社-图书详情-《汇编语言与计算机体系结构——使用C++和Java》...相关推荐

  1. java 8书籍_清华大学出版社-图书详情-《Java 8高级应用与开发》

    前言 本书不是一本简单的Java教材,不是知识点的铺陈,而是致力于将知识点融入实际项目的开发中.作为Java技术教材,最困难的事情是将一些复杂.难以理解的技术和思想让初学者能够轻松理解并快速掌握.本书 ...

  2. 数据结构(java)课后答案_清华大学出版社-图书详情-《数据结构实用教程(Java语言描述)习题参考解答》...

    前 言 本书是与作者编著的<数据结构实用教程(Java语言描述)>一书相配套的辅助教材.全书共分为11章,包括绪论.集合.线性表.稀疏矩阵和广义表.栈和队列.树和二叉树.常用二叉树.图.图 ...

  3. java程序设计 第三版_清华大学出版社-图书详情-《Java语言程序设计(第3版)》...

    第3版前言 Java语言是目前应用最广泛的编程语言之一,学习和使用Java的人越来越多.为了帮助初学者尽快掌握Java编程,感受到Java语言的魅力,领会到Java编程的快乐,笔者根据长期Java授课 ...

  4. java程序设计 一种跨学科_清华大学出版社-图书详情-《Java程序设计:一种跨学科的方法》...

    对于传统的CS1课程来说这本书是跨学科的方法.在本书中,作者重点讲述了从材料科学.基因组.天体物理学到网络系统等各学科中计算的角色.这种方法主要是向学生强调在当今世界中,数学.科学.工程和计算是紧密联 ...

  5. java程序设计基础(第3版)实验指导_清华大学出版社-图书详情-《Java程序设计基础(第5版)实验指导与习题解答》...

    本书是清华大学出版社出版的<Java程序设计基础(第5版)>的配套用书.全书共分为两部分,第一部分是上机实验指导,第二部分是主教材<Java程序设计基础(第5版)>中的习题解答 ...

  6. java程序设计实用教程_清华大学出版社-图书详情-《Java程序设计实用教程》

    技术具有卓越的通用性.高效性.平台移植性和安全性,经过20多年的发展,目前已广泛应用于PC.数据中心.游戏控制台.超级计算机.移动电话和互联网,同时拥有全球最大的开发者专业社群.在全球云计算和移动互联 ...

  7. java程序设计清华大学出版社_清华大学出版社-图书详情-《Java程序设计基础》...

    出 版 说 明 我国高等学校计算机教育近年来迅猛发展,应用所学计算机知识解决实际问题,已经成为当代大学生的必备能力. 时代的进步与社会的发展对高等学校计算机教育的质量提出了更高.更新的要求.现在,很多 ...

  8. java程序设计实验指导与习题解答_清华大学出版社-图书详情-《Java程序设计基础(第6版)实验指导与习题解答》...

    前言 本书是清华大学出版社出版的<Java程序设计基础(第6版)>一书的配套用书.全书共分为两部分: 第一部分是实验指导: 第二部分是主教材<Java程序设计基础(第6版)>的 ...

  9. java语言程序设计你_清华大学出版社-图书详情-《Java语言程序设计》

    前言 Java语言是一种典型的面向对象的.跨平台的.支持分布式和多线程的优秀编程语言,具有极强的扩展性.自其诞生以来,迅速被业界认可并广泛应用于Web应用程序的开发中.在此形势下,国内高校在计算机及相 ...

最新文章

  1. let 与 expr Shell运算比较 let强强胜出
  2. 清华「男神」沈天成,踢毽子踢成了2021学生年度人物
  3. 从Jenkins迁移到Jenkins X:一场持续交付之旅\n
  4. 美国司法部将对大型科技公司展开广泛、新的反垄断审查
  5. ASP.NET MVC 4 (九) 模型绑定
  6. ningbooj--1655--木块拼接(贪心)
  7. Dart 1(环境安装)
  8. 统一建模语言UML轻松入门之用例
  9. java 中缀式转后缀式
  10. Exchange 2016 CU9 已发布
  11. 用python编写密码安全性_密码安全性
  12. delphi 不允许在线程里操作ui怎么办_11款鲜为人知的在线工具,全面而又强大
  13. php实现手机号注册登录,thinkphp 手机号和用户名同时登录
  14. 基于Spark的电影推荐系统(推荐系统~2)
  15. 线性代数常用知识点总结
  16. 华为服务器开机启动项怎么设置_华为服务器怎么设置u盘启动
  17. 【python--爬虫】守望先锋英雄介绍视频爬虫
  18. 计算机名无法修改怎么办,win7系统计算机名字无法更改的解决方法
  19. 用PPT做的微信红包封面还可以这么玩?
  20. 图书馆小程序—Alpha迭代—第七周会议记录

热门文章

  1. .net mapi_使用C#.NET通过MAPI访问收件箱
  2. java实现多个mav文件拼接合并成一个mav文件
  3. linux中文本编辑vi命令插入技巧
  4. [OpenVas/Gvm]Failed to find config ‘085569ce-73ed-11df-83c3-002264764cea‘
  5. DOSBOX搭建汇编环境
  6. 看不完的那种!前端170面试题+答案学习整理(良心制作)
  7. java整合消息推送_SpringMVC整合websocket实现消息推送及触发功能
  8. 解决nasm/yasm not found or too old. Use --disable-x86asm for a crippled build报错
  9. Python批量改变图片的名字(非常好用,亲测)
  10. Ubuntu系统重装Ubuntu系统