计算机系统基础
作者 : 袁春风
出版日期 : 2014-07-07
ISBN : 978-7-111-46477-8
定价 : 49.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 390
开本 : 16
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书主要介绍与计算机系统相关的核心概念,解释这些概念如何相互关联并最终影响程序执行的结果和性能。本书共分8章,主要内容包括数据的表示和运算、程序的转换及机器级表示、程序的链接、程序的执行、存储器层次结构、虚拟存储器、异常控制流和I/O操作的实现等。
本书内容详尽,反映现实,概念清楚,通俗易懂,实例丰富,并提供大量典型习题供读者练习。本书可以作为计算机专业本科或大专院校学生计算机系统方面的基础性教材,也可以作为有关专业研究生或计算机技术人员的参考书。

图书特色

计算机教学的改革是一项需要付出艰苦努力的长期任务,“系统思维”能力的提高更是一件十分困难的事。计算机的教材还需要与时俱进,不断反映技术发展的最新成果。一本好的教材应能激发学生的好奇心和愿意终身为伴的激情。愿更多的学校参与“计算机系统”教学的改革,愿这本教材在教学实践中不断完善,为我国培养从事系统级创新的计算机人才做出更大贡献。
—— 中国工程院院士 李国杰

本书是国内第一本基于“IA-32+Linux+GCC+C语言”平台的关于计算机系统基础内容的教材。本书通过讲解高级语言中的数据、运算、语句、过程调用和I/O操作等在计算机系统中的实现细节,使读者能够很好地将高级语言程序、汇编语言、编译和链接、组成原理、操作系统等相关的基础内容有机贯穿起来,以建立完整的计算机系统概念,从而能深刻理解计算机系统中各个抽象层之间的等价转换关系;同时,由于本书为程序员描述了高级语言程序对应的机器级行为,因此,它可以作为“程序设计基础”课程的深入内容,能起到为其解疑答惑的作用,从而使程序员能够在了解程序的机器级行为的基础上编制出高效的程序,并在程序调试、性能提升、程序移植和保证健壮性等方面成为高手。

本书主要内容:
● 计算机系统概述 ● 数据的机器级表示与处理
● 程序的转换及机器级表示 ● 程序的链接
● 程序的执行 ● 层次结构存储系统
● 异常控制流 ● I/O操作的实现

袁春风 南京大学计算机科学与技术系教授。主要研究领域为大数据计算与并行处理技术、Web信息检索与文本挖掘技术、多媒体文档处理等。在相关领域承担科研项目30多项,发表论文60多篇,在Web信息处理方面获专利近10项,两次获江苏省科技进步二等奖,并获江苏省优秀软件一等奖。主持的“计算机组成原理”和“计算机组成与系统结构”课程被遴选为国家级精品课程、国家级精品资源共享课、江苏省精品课程、教育部-微软精品课程;所负责的“计算机组成与系统结构”课程网站获得江苏省优秀多媒体课件特等奖;独立编写普通高等教育“十一五”国家级规划教材《计算机组成与系统结构》以及《计算机组成与系统结构习题解答与教学指导》,该教材被遴选为江苏省精品教材;所承担的课程群被遴选为江苏省优秀课程群;所负责的“计算机系统专业课程体系”被遴选为2013年教育部-英特尔公司产学合作专业综合改革项目;作为主要成员获2013年江苏省教学成果特等奖。

图书前言

后PC时代的到来,使得原先基于PC而建立起来的专业教学内容已经远远不能反映现代社会对计算机专业人才的培养要求,原先计算机专业人才培养强调“程序”设计也变为更强调“系统”设计。这需要我们重新规划教学课程体系,调整教学理念和教学内容,加强学生系统能力培养,使学生能够深刻理解计算机系统整体概念,更好地掌握软/硬件协同设计和程序设计技术,从而更多地培养出满足业界需求的各类计算机专业人才。不管培养计算机系统哪个层面的计算机技术人才,计算机专业教育都要重视学生“系统观”的培养。
本书的主要目的就是为加强计算机专业学生的“系统观”而提供一本关于“计算机系统基础”课程教学的教材。
1.本书的写作思路和内容组织
本书从程序员视角出发,重点介绍应用程序员如何利用计算机系统相关知识来编写更有效的程序。本书以高级语言程序的开发和运行过程为主线,将该过程中每个环节所涉及的硬件和软件的基本概念关联起来,试图使读者建立一个完整的计算机系统层次结构框架,了解计算机系统的全貌和相关知识体系,初步理解计算机系统中的每一个抽象层及其相互转换关系,建立高级语言程序、ISA、OS、编译器、链接器等之间的相互关联;对指令在硬件上的执行过程和指令的底层硬件执行机制有一定的认识和理解,从而增强读者在程序的调试、性能优化、移植和健壮性保证等方面的能力,并为后续的“计算机组成与设计”、“操作系统”、“编译技术”、“计算机体系结构”等课程打下坚实基础。
本书的具体内容包括:程序中处理的数据在机器中的表示和运算、程序中各类控制语句对应的机器级代码的结构、可执行目标代码的链接生成、可执行目标代码中的指令序列在机器上的执行过程、存储访问过程、打断程序正常执行的机制以及程序中的I/O操作功能如何通过请求操作系统内核提供的系统调用服务来完成等。
不管构建一个计算机系统的各类硬件和软件多么千差万别,计算机系统的构建原理以及在计算机系统上的程序转换和执行机理是相通的,因而,本书仅介绍一种特定计算机系统平台下的相关内容。本书所用的平台为IA-32/x86-64+Linux+GCC+C语言。
本书共有8章,分两个部分。第一部分主要是系统概要并介绍可执行目标文件的生成,包含第1~4章;第二部分主要介绍可执行目标文件的运行,包含第5~8章。第1章是计算机系统概述;第2章和第3章分别介绍高级语言程序中的数据和语句所对应的底层机器级表示,展示的是高级语言程序到机器级语言程序的对应转换关系;第4章主要介绍如何将不同的程序模块链接起来构成可执行目标文件,展示的是程序的链接环节;第5章和第6章着重介绍程序的运行环节,包括与程序运行密切相关的硬件部分——CPU及存储器的组织;第7章介绍打断程序正常运行的事件机制——异常控制流;第8章主要介绍程序中I/O操作的实现机制。此外,附录A中还补充了数字逻辑电路的基础内容,为那些没有数字逻辑电路基础知识的读者阅读本书提供方便。
2.读者所需的背景知识
本书假定读者对C语言程序设计有一定的基础,已经掌握了C语言的语法和各类控制语句、数据类型及其运算、各类表达式、函数调用和C语言的标准库函数等相关知识。
此外,本书对于程序中指令的执行过程进行了介绍,这涉及布尔代数、逻辑运算电路、存储部件等内容,因而,本书正文内容假定读者具有数字逻辑电路基础知识。不过,如果读者不具备这些背景知识的话,可以参看本书附录A。
本书所用的平台为IA-32/x86-64+Linux+GCC+C语言。书中大多数C语言程序对应的机器级表示都是基于IA-32/Linux平台用GCC编译器生成的,本书会在介绍程序的机器级表示之前,先简要介绍IA-32的指令集体系结构,包括其机器语言和汇编语言的介绍,因而,读者无需任何机器语言和汇编语言的背景知识。
XII3.使用本书作为教材的课程及教学建议
目前国内大学计算机专业课程设置,大多是按计算机系统层次结构进行横向切分,自下而上分解成数字逻辑电路、计算机组成原理、汇编程序设计、操作系统、编译原理、程序设计等课程,而且,每门课程都仅局限在本抽象层,相互之间几乎没有关联,因而学生对整个计算机系统的认识过程就像“瞎子摸象”一样,很难形成一个对完整计算机系统的全面认识。虽然国内有些高校也有计算机系统概论、计算机系统入门或导论之类的课程,但通常内容较广且结构较松散,基本上是计算机课程概论,因而很难使学生真正形成计算机系统层次结构整体框架。
笔者对美国几所顶级大学近年来相关课程体系进行了跟踪调查,发现他们都非常注重计算机系统能力的培养,都在学完高层的编程语言及程序设计课程后开设了一门关于计算机系统的基础课程,如MIT的6.004、UC-Berkeley的CS 61C、CMU的CS 213、斯坦福大学的CS 107等。这些课程在内容上特别注重计算机系统各抽象层的纵向关联,将高级语言程序、汇编语言程序、机器代码及其执行串联起来,为学生进一步学习后续相关课程打下坚实的基础。
本书在借鉴国外相关课程教学内容和相关教材的基础上编写,适合于在完成程序设计基础课程后进行学习,本书内容贯穿计算机系统各个抽象层,是关于计算机系统的最基础内容,因而使用本书作为教材开设的课程适用于所有计算机相关专业。
使用本书作为教材开设的课程名称可以是“计算机系统基础”、“计算机系统导论”或类似名称,可以有以下几种安排方案。
章号内容课程①②③④⑤1计算机系统概述√√√√√2数据的机器级表示与处理√√√√√3程序的转换及机器级表示√√√√4程序的链接√√√5程序的执行√√√√6层次结构存储系统√√√√7异常控制流√√8I/O操作的实现√√附录A数字逻辑电路基础√√√√√
上表的课程安排及教学建议说明如下:
第①种课程适合于软件工程等不需要深入掌握底层硬件细节的专业。开设该课程后,则无需再开设“数字逻辑电路”、“汇编程序设计”、“计算机组成原理”和“微机原理与接口技术”课程,因为本书基本涵盖了上述课程中的所有主要内容,并将它们与高级语言程序、操作系统中的部分概念、编译和链接中的基本内容有机联系在一起了。这样做,不仅能缩减大量课时,还可以通过该课程的讲授为学生系统能力培养打下坚实的基础。因为课程内容较多,建议开设为一个一学年课程,第一学期学习附录A和第1~4章,第二学期学习第5~8章。每学期的总学时数为60左右。
第②种课程适合于计算机工程、计算机系统等偏系统或硬件的专业。可以在该课程后开设一门将数字逻辑电路和计算机组成及设计的内容合并的课程,专门介绍计算机微体系结构的数字系统设计技术;也可以在该课程之前先开设“数字逻辑电路”课程,之后再开设“计算机组成与设计”课程。美国几个顶级大学采用的是前面一种做法。建议开设为一个一学期课程,总学时数为80左右。
第③、④和⑤种课程,适合于其他与计算机相关的非计算机专业或那些大专类计算机专业,在学时受限的情况下,可以选择一些基本内容进行讲授。建议开设为一个一学期课程,总学时数在60~80。
XIII本书对于存储访问机制和异常控制流这两部分内容,在介绍基本原理的基础上,还简要介绍了IA-32/Linux平台的具体实现(书中带*的章节)。由于基本原理在一个具体平台中的实现往往比较复杂,因而带*章节的内容相对较难。若本书用作教材的话,这部分可以选择不作为课堂教学内容。但是,如果后续的操作系统课程实验内容是基于IA-32/Linux平台实现的话,建议将这部分内容作为重点讲解。
4.如何阅读本书
本书的出发点是试图将计算机系统每个抽象层中涉及的重要概念通过程序的开发和运行过程这个主线串起来,因而本书涉及的所有问题和内容都是从程序出发的。这些内容或者涉及程序中数据的表示及运算;或者涉及程序对应的机器级表示;或者涉及多个程序模块的链接;或者涉及程序的加载及运行;或者涉及程序执行过程中的异常中断事件;或者涉及程序中的I/O操作等。从读者熟悉的程序开发和运行过程出发来介绍计算机系统基本概念,可以使读者将新学的概念与已有的知识关联起来,不断拓展和深化知识体系。特别是,因为所有内容从程序出发,因而所有内容都可以通过具体程序进行验证,边学边干中使所学知识转化为实践能力。
本书虽然涉及内容较广,但所有内容之间具有非常紧密的关联,因而,建议读者在阅读本书时采用“整体性”学习方法,通过第1章的学习先建立一个粗略的计算机系统整体框架,然后不断地通过后续章节的学习,将新的内容与前面内容关联起来,以逐步细化计算机系统框架内容,最终形成比较完整的、相互密切关联的计算机系统整体概念。
本书提供了大量的例题和课后习题,这些题目大多是具体的程序示例,通过对这些示例的分析或验证性实践,读者可以对基本概念有更加深刻的理解。因此,在阅读本书时,若遇到一些难以理解的概念,可以先不用仔细琢磨,而是通过具体的程序示例来对照基本概念进行理解。
本书提供的小贴士对理解书中的基本概念很有用,但是,由于篇幅有限,这些补充资料不可能占用很大篇幅,因而大多是简要内容。如果读者希望了解更多的细节内容,可以自行到互联网上查找。
XIV本书内容虽然涉及高级语言程序设计、数字逻辑电路、汇编语言程序、计算机组成与系统结构、操作系统、编译和链接等,但是,本书主要讲解它们之间的关联,而不提供其细节,如果读者想要了解更详细的关于数字系统设计、操作系统、编译技术、计算机体系结构等方面的内容,则还要阅读关于这些内容的专门书籍。不过,若读者学完本书后再去阅读这些方面的专门书籍,则会轻松很多。
5.致谢
衷心感谢在本书的编写过程中给予我热情鼓励和中肯建议的各位专家、同事和学生们,正是因为有他们的鞭策、鼓励和协助,才能使我顺利完成了本书的编写。
在本书的编写过程中,得到了国防科技大学王志英教授、北京航空航天大学马殿富教授、西北工业大学周兴社教授、武汉大学何炎祥教授、北京大学陈向群教授等各位专家的悉心指导和热情鼓励;浙江大学城市学院杨起帆教授对本书的前三章进行仔细审阅,提出了许多宝贵的修改意见;西安邮电大学陈莉君教授、山东大学杨兴强副教授和中国石油大学张琼声副教授从书稿的篇章结构到内容各方面都提出了许多宝贵的意见;余子濠同学对书中部分程序进行了验证,并对全书文字内容进行了校对,提出了许多有益的修改意见;路通副教授对本书的内容和篇章结构提出了宝贵的意见;蒋炎岩同学对本书的结构和编写思路提出了宝贵的意见;中国石油大学范志东同学对本书第8章部分内容提出了宝贵的修改意见,并提供了第4章中的某可执行文件程序头表中的部分信息;浙江大学城市学院在教学中试用了本书的试用版。在此对以上各位老师、学生和有关院系一并表示衷心的感谢。
本书是以作者在南京大学从事“计算机组成与系统结构”课程教学20多年所积累的部分讲稿内容为基础编写而成的,感谢各位同仁和各届学生对讲稿内容所提出的宝贵的反馈和改进意见,使得本教材的内容得以不断地改进和完善。
特别感谢机械工业出版社华章分社在本书的编写过程中提供了极大的支持,包括提供大量国外优秀的相关图书资料,并多次组织国内权威专家进行相关研究和具体指导等。最后,要特别感谢本书的责任编辑刘立卿女士,她极其专业和非常细致的审校和编辑工作为本书的出版质量提供了可靠的保证。
6.结束语
本书广泛参考了国内外相关的经典教材和教案,在内容上力求做到取材先进并反映技术发展现状;在内容的组织和描述上力求概念准确、语言通俗易懂、实例深入浅出,并尽量利用图示和实例来解释和说明问题。但是,由于计算机系统相关技术在不断发展,新的思想、概念、技术和方法不断涌现,加之作者水平有限,在编写中难免存在不当或遗漏之处,恳请广大读者对本书的不足之处给予指正,以便在后续的版本中予以改进。

作者于南京
2014年5月

上架指导

计算机\基础

封底文字

本书是国内第一本基于“IA-32+Linux+GCC+C语言”平台的关于计算机系统基础内容的教材。本书通过讲解高级语言中的数据、运算、语句、过程调用和I/O操作等在计算机系统中的实现细节,使读者能够很好地将高级语言程序、汇编语言、编译和链接、组成原理、操作系统等相关的基础内容有机贯穿起来,以建立完整的计算机系统概念,从而能深刻理解计算机系统中各个抽象层之间的等价转换关系;同时,由于本书为程序员描述了高级语言程序对应的机器级行为,因此,它可以作为“程序设计基础”课程的深入内容,能起到为其解疑答惑的作用,从而使程序员能够在了解程序的机器级行为的基础上编制出高效的程序,并在程序调试、性能提升、程序移植和保证健壮性等方面成为高手。

本书主要内容:
●计算机系统概述
●数据的机器级表示与处理
●程序的转换及机器级表示
●程序的链接
●程序的执行
●层次结构存储系统
●异常控制流
●I/O操作的实现

图书序言

(中国工程院院士 李国杰)
随着移动互联网、普适计算、云计算和物联网的普及,计算机的应用已渗透到经济和社会生活的各个角落。各行各业的应用需求千差万别,要求未来的计算机性能更高、适应性更强、使用更方便、成本和功耗更低、安全性更好等等,但能从事这种创新设计的人才从哪里来?我国的计算机专业培养的毕业生能否担当起这一重任?计算机界的有识之士一直在思考这个影响长远发展的大事情。 李国杰院士是我国计算机界的老一辈科学家,在并行处理、计算机体系结构、人工智能、组合优化等方面成果卓著,荣获过多项国家级奖励,领导中科院计算所和曙光公司为发展我国高性能计算机产业、研制龙芯高性能通用CPU芯片做出了重要贡献,对国内计算机科技、教育和产业的发展也提出过有影响的政策建议。
计算机专业已为我国培养了大量有用人才,但随着其他专业的学生也普遍学习计算机课程,计算机专业似乎有点迷失了方向。社会上开始流行这样的说法:计算机本科学生的硬件设计能力不如电子工程专业,行业应用软件开发能力不如熟悉本行业的其他专业学生,问题分析和算法设计能力不如数学专业学生。有些高中毕业生报考大学时不愿意报考计算机专业,他们认为通信专业学的计算机课程甚至比计算机专业还多。这些现象迫使我们回答:究竟计算机专业的特征和强项是什么?
一言以蔽之,计算机专业的重要特征是“系统思维”。所谓“系统思维”是指对系统不同层次的抽象和归纳、对整机系统的性能分析和优化、对系统出现的各类错误的诊断和维护、对计算机技术发展趋势全局性的理解等等。其他专业学计算机知识是为了应用计算机技术解决不同领域的实际问题,而计算机专业的目标之一是培养能设计和制造计算机、在计算技术领域实现创新的人才,不只是培养会编程序的“码农”。计算机专业的学生应具有系统层面的理解能力,能站在系统的高度解决应用问题。总之,对计算机系统是否有较深入的了解是区别计算机专业人才和非专业人才的重要标志。
计算机是处理信息的复杂系统。但长期以来我们采用“解剖学”的思路进行计算机教学,按照硬件、软件、应用等分类横切成几门相对独立的课程,使得计算机系毕业的学生对整个计算机系统缺乏完整的理解。如果问已经学完全部课程的学生,从你在键盘上敲一个字母键到屏幕上出现一个字母,在这一瞬间计算机中哪些硬件和软件在运转,如何运转?可能绝大多数学生都讲不清楚。对于更复杂的一段应用程序,计算机内部究竟如何一步一步地实现,不但学生们感到茫然,估计能讲明白的老师也不太多。造成这种局面的原因是我们不重视“计算机系统”的教育,缺乏“系统”思维观念。我国计算机一级学科中,最薄弱的二级学科是计算机系统结构,计算机专业的大学生中有兴趣从事系统结构研究的学生也很少,这可能是我国计算机领域自主创新不足的重要原因。未来计算机应用的性能和满意度越来越依靠软硬件磨合、优化的程度,也就是说,掌握系统知识的人将越来越受重视。
目前国内大学的计算机专业课程,如数字逻辑电路、计算机组成原理、汇编程序设计、操作系统、编译原理、程序设计等,都局限在一个抽象层次,很少讲授层次之间的关联,缺乏全局观。虽然少数学校开设了“计算机系统概论”之类的课程,但多数是专业课程的粗浅介绍,还没有上升到“系统思维”的高度。
南京大学计算机系很重视计算机教学的改革,对美国麻省理工学院、加州大学伯克利分校、斯坦福大学、卡内基梅隆大学等著名大学与计算机系统有关的课程进行了深入的对比分析,找出了我国大学在课程设置和教学内容上的差距。他们将过去的“计算机系统概论”和“计算机组成与系统结构”两门课的内容重新组合,形成新的“计算机系统基础”和“计算机组成与设计”两门课,前者是全系学生的必修课。南京大学为提高学生计算机系统思维能力做了有益的尝试。
摆在读者面前的这本《计算机系统基础》是南京大学袁春风教授多年来致力于计算机教学改革的结晶。袁教授在计算机组成和系统结构的教学方面积累了丰富的经验,目前正在主持国家精品课程和国家级精品资源共享课“计算机组成原理”的教学工作,并主持完成了《计算机系统基础》教材的编写工作。这本教材通过讲解高级语言中数据、运算、过程调用和I/O操作等在计算机系统中的实现细节,使读者在学习时将程序设计、汇编语言、系统结构、操作系统、编译链接中关键的系统概念贯穿起来,真正明白计算机系统如何运转。这本教材是从程序员如何认识系统的角度编写的,书中通过解释计算机如何执行非常简单的一段打印“hello”的程序,让程序员理解与高级语言程序对应的机器行为,这是一种训练“系统思维”的好方式。我相信本书将为读者在软硬件磨合、性能调试优化、软件移植等方面打下更坚实的基础。
计算机教学的改革是一项需要付出艰苦努力的长期任务,“系统思维”能力的提高更是一件十分困难的事。计算机的教材还需要与时俱进,不断反映技术发展的最新成果。一本好的教材应能激发学生的好奇心和愿意终身为伴的激情。愿更多的学校参与到“计算机系统”教学的改革中来,愿这本教材在教学实践中不断完善,为我国培养从事系统级创新的计算机人才做出更大贡献。
是为序。

李国杰
2014年5月

作者简介

袁春风:暂无

图书目录

丛书序言
序  言
前  言
第一部分 系统概述和可执行目标文件的生成
第1章 计算机系统概述2 
1.1 计算机的发展历程2
   1.1.1 电子计算机的诞生2
   1.1.2 第一代计算机2
   1.1.3 第二代计算机3
   1.1.4 第三代计算机3
   1.1.5 第四代计算机4
 1.2 计算机系统的基本功能和基本组成5
   1.2.1 计算机系统的基本功能5
   1.2.2 计算机硬件6
   1.2.3 计算机软件10
 1.3 程序开发与执行过程11
   1.3.1 从源程序到可执行程序11
   1.3.2 可执行文件的启动和执行12
   1.3.3 程序中每条指令的执行13
 1.4 计算机系统的层次结构15
   1.4.1 计算机系统抽象层的转换15
   1.4.2 计算机系统的不同用户17
 1.5 计算机系统性能评价19
   1.5.1 计算机性能的定义19
   1.5.2 计算机性能的测试19
   1.5.3 用指令执行速度进行性能评估21
   1.5.4 用基准程序进行性能评估23
 1.6 本书的主要内容和组织结构24
 1.7 小结26
 习题27
第2章 数据的机器级表示与处理29
 2.1 数制和编码29
   2.1.1 信息的二进制编码29
   2.1.2 进位计数制31
   2.1.3 定点与浮点表示35
   2.1.4 定点数的编码表示35
 2.2 整数的表示40
   2.2.1 无符号整数和带符号整数的表示40
   2.2.2 C语言中的整数及其相互转换41
 2.3 浮点数的表示43
   2.3.1 浮点数的表示范围43
   2.3.2 浮点数的规格化44
   2.3.3 IEEE 754浮点数标准44
   2.3.4 C语言中的浮点数类型48
 2.4 十进制数的表示50
   2.4.1 用ASCII码字符表示50
   2.4.2 用BCD码表示50
 2.5 非数值数据的编码表示51
   2.5.1 逻辑值51
   2.5.2 西文字符51
   2.5.3 汉字字符52
 2.6 数据的宽度和存储54
   2.6.1 数据的宽度和单位54
   2.6.2 数据的存储和排列顺序55
 2.7 数据的基本运算58
   2.7.1 按位运算和逻辑运算59
   2.7.2 左移运算和右移运算59
   2.7.3 位扩展运算和位截断运算61
   2.7.4 整数加减运算61
   2.7.5 整数乘除运算65
   2.7.6 常量的乘除运算67
   2.7.7 浮点数运算69
 2.8 小结73
 习题74
第3章 程序的转换及机器级表示82
 3.1 程序转换概述82
   3.1.1 机器指令及汇编指令83
   3.1.2 指令集体系结构84
   3.1.3 生成机器代码的过程84
 3.2 IA-32指令系统概述88
   3.2.1 数据类型及其格式89
   3.2.2 寄存器组织和寻址方式90
 3.3 IA-32常用指令类型及其操作95
   3.3.1 传送指令95
   3.3.2 定点算术运算指令98
   3.3.3 按位运算指令101
   3.3.4 控制转移指令102
   3.3.5 x87浮点处理指令107
   3.3.6 MMX/SSE指令集108
 3.4 C语言程序的机器级表示110
   3.4.1 过程调用的机器级表示110
   3.4.2 选择语句的机器级表示121
   3.4.3 循环结构的机器级表示125
 3.5 复杂数据类型的分配和访问128
   3.5.1 数组的分配和访问128
   3.5.2 结构体数据的分配和访问132
   3.5.3 联合体数据的分配和访问135
   3.5.4 数据的对齐137
 3.6 越界访问和缓冲区溢出138
   3.6.1 缓冲区溢出攻击139
   3.6.2 缓冲区溢出攻击的防范141
 3.7 兼容IA-32的64位系统143
   3.7.1 x86-64的发展简史143
   3.7.2 x86-64的基本特点144
   3.7.3 x86-64的基本指令和对齐144
 3.8 小结150
 习题151
第4章 程序的链接165
 4.1 编译、汇编和静态链接165
   4.1.1 编译和汇编165
   4.1.2 可执行目标文件的生成166
 4.2 目标文件格式168
   4.2.1 ELF目标文件格式168
   4.2.2 可重定位目标文件格式170
   4.2.3 可执行目标文件格式171
 4.3 符号表和符号解析173
   4.3.1 符号和符号表173
   4.3.2 符号解析176
   4.3.3 与静态库的链接179
 4.4 重定位181
   4.4.1 重定位信息182
   4.4.2 重定位过程182
 4.5 可执行文件的加载186
 4.6 动态链接188
   4.6.1 动态链接的特性188
   4.6.2 程序加载时的动态链接188
   4.6.3 程序运行时的动态链接190
 4.7 小结191
 习题192
第二部分 可执行目标文件的运行
第5章 程序的执行200
 5.1 程序执行概述200
   5.1.1 程序及指令的执行过程200
   5.1.2 CPU的基本功能和组成202
   5.1.3 打断程序正常执行的事件204
 5.2 数据通路基本结构和工作原理205
   5.2.1 数据通路基本结构205
   5.2.2 数据通路的时序控制206
   5.2.3 数据通路基本工作原理208
 5.3 流水线方式下指令的执行213
   5.3.1 指令流水线的基本原理213
   5.3.2 适合流水线的指令集特征217
   5.3.3 CISC和RISC风格指令集217
   5.3.4 指令流水线的实现220
   5.3.5 高级流水线实现技术224
 5.4 小结225
 习题226
第6章 层次结构存储系统229
 6.1 存储器概述229
   6.1.1 存储器的分类229
   6.1.2 主存储器的组成和基本操作231
   6.1.3 存储器的主要性能指标231
   6.1.4 各类存储元件的特点232
   6.1.5 存储器的层次结构233
 6.2 主存与CPU的连接及其读写操作233
   6.2.1 主存模块的连接和读写操作233
   6.2.2 “装入”指令和“存储”指令操作过程237
 6.3 磁盘存储器238
   6.3.1 磁盘存储器的结构238
   6.3.2 磁盘存储器的性能指标240
   6.3.3 磁盘存储器的连接242
   6.3.4 固态硬盘243
 6.4 高速缓冲存储器244
   6.4.1 程序访问的局部性244
   6.4.2 cache的基本工作原理246
   6.4.3 cache行和主存块的映射248
   6.4.4 cache中主存块的替换算法253
   6.4.5 cache一致性问题254
   6.4.6 影响cache性能的因素255
   6.4.7 IA-32的cache结构举例257
   6.4.8 cache和程序性能258
 6.5 虚拟存储器261
   6.5.1 虚拟存储器的基本概念262
   6.5.2 虚拟地址空间263
   6.5.3 虚拟存储器的实现264
   6.5.4 存储保护271
*6.6 IA-32/Linux中的地址转换272
   6.6.1 逻辑地址到线性地址的转换272
   6.6.2 线性地址到物理地址的转换277
 6.7 小结280
 习题280
第7章 异常控制流287
 7.1 进程与进程的上下文切换287
   7.1.1 程序和进程的概念287
   7.1.2 进程的逻辑控制流288
   7.1.3 进程的上下文切换290
   7.1.4 进程的私有地址空间291
   7.1.5 程序的加载和运行293
 7.2 异常和中断295
   7.2.1 基本概念295
   7.2.2 异常的分类296
   7.2.3 中断的分类300
   7.2.4 异常和中断的响应过程301
  7.2.5 IA-32的中断向量表303
  7.2.6 IA-32的中断描述符表303
  7.2.7 IA-32中异常和中断的处理305
  7.2.8 Linux对异常和中断的处理306
  7.2.9 IA-32/Linux的系统调用309
 7.3 小结312
 习题312
第8章 I/O操作的实现315
 8.1 I/O子系统概述315
 8.2 用户空间I/O软件318
   8.2.1 用户程序中的I/O函数319
   8.2.2 文件的基本概念320
   8.2.3 系统级I/O函数322
   8.2.4 C标准I/O库函数324
   8.2.5 用户程序中的I/O请求328
 8.3 I/O硬件与软件的接口330
   8.3.1 I/O设备330
   8.3.2 设备控制器331
   8.3.3 I/O端口及其编址333
   8.3.4 I/O控制方式334
 8.4 内核空间I/O软件341
   8.4.1 与设备无关的I/O软件341
   8.4.2 设备驱动程序343
   8.4.3 中断服务程序344
 8.5 小结346
 习题347
附录A 数字逻辑电路基础352
附录B gcc的常用命令行选项366
附录C GDB的常用命令368
参考文献371

教学资源推荐
作者: [美]蒂姆·拉夫加登(Tim Roughgarden) 著
作者: [德]贝蒂尔·施密特(Bertil Schmidt) [西]豪尔赫·冈萨雷斯-多明格斯(Jorge González-Domínguez) [德]克里斯蒂安·洪特(Christian Hundt) [德]莫里茨·施拉布(Moritz Schlarb) 著
作者: [美]罗德·斯蒂芬斯(Rod Stephens) 著
参考读物推荐
作者: [美]布莱恩·W. 柯尼汉(Brian W. Kernighan) 著
作者: 侯晴 汪翔