
编辑推荐
本书主要提供“计算机组成和体系结构”课程的教学内容,包括计算机组成的原理知识,计算机硬件的设计技术,以及简单的实例计算机系统的工程实现,重点强调计算机硬件系统的组成原理、设计技术、工程实现三个方面的内容。作为计算机硬件课程的教材,本书涉及数字电路基础与逻辑设计基础知识、完整的计算机组成原理知识与设计实现技术、计算机系统结构的基础知识和概念等三门课程的有关内容,期望在有限的学时范围内,初步学习到计算机专业关键的三门硬件类课程的基本知识,强调所学知识的系统性和实用程度,强调培养学生的开创意识和实际工作能力。
? 本版的书名增加了“基本原理、设计技术与工程实现”的副标题,特意指出书中提供三类不同性质的教学内容。第一类内容是计算机组成原理与运行机制的核心知识,属于学生一定要掌握的原理性基础知识,在绝大多数同类教材中都会重点讲解;第二类内容是计算机硬件系统的基本设计技术,多数同类教材中讲解不多也欠具体应用实例;第三类内容是计算机硬件系统的入门性工程实现问题,其他教材中较少涉及,在这一版本的教材中对上述三类内容都有适度的讲解。
? 本版增加了计算机系统的工程实现的内容,又对计算机硬件设计技术的内容进行了重点修订,在对有关设计技术进行必要讲解之后,还要进一步给出描述计算各功能部件的组成与功能、使用与控制的ABEL-HDL程序的部分源码,这个程序的结构与实现功能容易读懂,更能方便地实现扩展新的指令和添加新的系统功能。
? 计算机各个功能部件的组成、运行原理和控制使用是课程教学的重点内容,在本版教材中,在强调讲清基本原理和基础概念的基础上,还要提供组成简单、能够实用的功能部件实例,最终还可以使用这些部件实例构建成能够正常运行的教学计算机系统,而这些设计实现的主要工作将交由学生以教学实验的方式来完成,这对培养学生承担实际工作的能力和大有益处,比较充分地体现出作者在主持建设“计算机组成原理”国家精品课程的教学理念。
? 在教材中强调把指令格式选择和指令系统设计、机器语言和汇编语言编程作为重点教学内容之一,为此需要提供使用这套指令系统设计完成的实例计算机系统的监控程序,从而使计算机组成原理课程教学摆脱了硬软件完全分割的局面,有利于加深学生对计算机整机系统的正确理解,这在其他同类教材中是很少见到的。
作者简介
作者:(中国)宋佳兴
宋佳兴,请华大学计算机科学与技术系副研究员,博士。主要研究方向为计算机网络、分布式信息系统等。在相关领域承担多项科研项目,发表论文20余篇,获省部级科技进步奖2项。是清华大学国家精品课“计算机组成原理”课程主要成员,获省部级教学成果奖1项。主讲数据库技术及应用、计算机组成与系统结构课程。
王诚,多年在清华大学计算机系教学和科研第一线工作,出版了十余本书,教学取得优异业绩,科研工作也有十余项重要成果。在长达十七、八年的教学过程中,重点主讲“计算机组成原理”、“计算机组成与体系结构”等课程,计算机组成原理课被评为国家、北京市、清华大学三个级别的精品课程,获北京市高教教学成果一等奖。出版多本主教材和实验指导书,其中有2本被评为北京市精品教材,进入国家 级“十五”和“十一五”规划教材。开发研制了教学硬件实验设备及其软件模拟系统,制作了教学课件,在全国有较大影响。
目录
名誉主任: 陈火旺主任: 李晓明副主任: 钱德沛焦金生委员: (按姓氏笔画排序)
马殿富王志英王晓东宁洪刘辰
孙茂松李大友李仲麟吴朝晖何炎祥
宋方敏张大方张长海周兴社侯文永
袁开榜钱乐秋黄国兴蒋宗礼曾明
廖明宏樊孝忠秘书: 张瑞庆
本书主审: 李晓明
前言FOREWORD对这一版的书名做了一点变动,增加了“基本原理、设计技术与工程实现”的副标题,特意指出书中提供3类不同性质的教学内容。第一类是计算机组成原理与运行机制的核心知识,属于学生一定要掌握的原理性基础知识,在绝大多数的同类教材中都会重点讲解。第二类是计算机硬件系统的基本设计技术,多数同类教材中讲解不多也欠具体应用实例。第三类是计算机硬件系统的入门性工程实现问题,同类教材中较少涉及,我们希望在这一版的教材中对上述3类内容都有适度的讲解,其中的工程实现问题只在主教材中简单提及,主要部分将放到《计算机组成与体系结构实验指导》教材中。这种安排体现了作者多年坚守的教学理念,从如下3个方面予以说明。
(1) 针对计算机组成原理这一类含有较多技术性、工程性、实践性内容的课程,教学安排不宜过分局限于教师课堂讲课、学生课上听讲和课后背书的学习方式,应该在讲课听课的基础上再较大幅度地加强教学实践环节,增强课程内容的实用性,促成学生用课堂学到的理论知识,设计实现一台组成简单完整、原理清晰实用、实验操作方便、支持汇编语言编程的简小计算机系统,促使学生在学习理论知识、掌握设计技术、提升实践能力等诸方面得到全面成长。
(2) 在讲解计算机硬件系统组成和功能实现时,应该把口语性的一般讲解和硬件描述语言的严谨描述恰当地结合起来,鼓励选用硬件描述语言设计计算机控制器和描述整机系统,既能体现计算机的最新设计技术和实现手段,保证教学内容适度的先进性,又可以培养学生严谨的思维方式和对硬件问题的深入理解和准确阐述,这有利于提高授课质量,降低学习和实验的难度。
(3) 在课程的教学安排中,需要处理好硬件子系统(重点部分)和软件子系统(配合部分)的关系,不能完全局限于硬件系统本身,还需要包含必要的软件内容,汇编语言程序设计应该占有一定分量,加深对硬、软件两类资源各自在计算机系统中的地位和作用的理解。指令系统是连接硬、软件系统的纽带,汇编语言编程有助于深入了解指令系统、计算机整机组成与运行控制机制。因此在教学计算机系统中配备了3个基本程序: PC仿真终端程序、交叉汇编程序、监控程序,对多数同学来说做到会使用它们就够了,鼓励有余力的同学探索这几个程序的实现思路和方法。
本书包括了数字电路基础、计算机组成、计算机体系结构3部分内容,共13章。
第1章是全书内容的概述部分,简要介绍计算机组成和体系结构的基本概念,从实现功能的角度介绍计算机硬件系统的5个功能部件;从功能和层次的观点来讲解计算机组成和体系结构各自需要研究和解决的问题,并简要说明了本课程的教学目标和对学习方法的建议。
第2章简明讲解数字电路基础知识和几种常用的电路芯片,是为讲解计算机组成和体系结构做电子线路方面的准备,没有这些知识是很难学懂计算机硬件的组成和运行原理的。
第3章的数据表示和运算、第4章的运算器部件共同构成本书核心内容的第1个知识单元,主要围绕承担数据运算功能的运算器部件进行讲解,在给出通用的基本原理知识的同时,还提供了设计实现一个原理性的8位运算器模型和一个4位位片结构的运算器芯片两个实例,展现运算器部件的设计过程和实现方法,提升学生的实践能力。
前言计算机组成与体系结构(第3版)第5章的指令系统和第6章的控制器部件共同构成本书核心内容的第2个知识单元,主要围绕指令格式选择、指令系统设计,以及硬件系统中的硬布线方案的控制器部件进行讲解,而对微程序方案控制器只作适当介绍。在给出通用的基本原理知识的同时,提供了一套简单实用的基本指令系统。硬件方面,选用多指令周期方案实现这套指令系统的控制器部件的具体例子,展现控制器部件的设计过程和实现方法,提升学生的实践能力。软件方面,使用这套指令系统设计了教学机的监控程序,可以支持汇编语言程序设计;若再扩展一部分指令,也可以支持解释执行的BASIC高级语言程序设计,能支持浮点数运算和多种基本数学函数运算。针对这门课程的教学要求来说,此时的教学机的硬软件系统已经比较完整,包括了计算机硬件软件系统全部6个层次的基本内容。
第7章的主存、第8章的高速缓存和虚存、第9章的辅助存储器设备共同构成本书核心内容的第3个知识单元,主要围绕计算机3级结构的存储器件系统和外存储器设备进行讲解,还给出了通过字、位扩展技术,用静态芯片构建内存储器部件的具体例子,支持存储器与CPU同步运行,展现内存储器的功能和经总线连接CPU的具体方法。
第10章的输入输出设备和第11章的输入输出系统共同构成本书核心内容的第4个知识单元,主要围绕承担计算机的输入输出功能的设备或者部件进行讲解,给出了用于连接计算机各个部件的单总线结构的实际例子,具体介绍了串行接口的内部线路组成和使用方法,并通过串口连接PC仿真终端,选用程序查询方式控制入出设备,使教学机整机系统具备了输入输出操作功能。
第12章的流水线技术和第13章的并行计算机体系结构共同构成本书核心内容的第5个知识单元,对应计算机体系结构课程的基础知识,针对提高计算机系统的性能,更多地强调基本概念、提出问题的思路和解决问题的方案,基本上止步于定性说明。
教学过程中,可以根据不同的课程安排和教学要求,合理分配教材中3部分内容的课时比例。针对把计算机组成和系统结构合并成一门课程的安排,教材第3~13章的内容都属于必学知识,建议教学学时安排为70~90。若只是用于计算机组成原理课程,计算机体系结构的内容另外开课,则只需讲解第3~11章中的知识,建议课内学时安排为60~70,另外安排约16个实验学时。
第2章用于复习先修课程的内容,简明介绍数字电路与逻辑设计知识,约占教材总篇幅的7%,是学习计算机组成和体系结构一定会用到的电路基础知识,也许要求并不太多也不深,但如果完全不了解这些内容,要听懂课堂授课内容难度很大,设计实现一个小计算机系统更无从谈起。
第1章、第3~11章是课程的主体部分,约占教材总篇幅的73%,主要是计算机组成方面较为完整的系统知识,重点围绕基本计算机硬件系统5个功能部件的功能和组成进行分析讲解。
第12章和第13章是本课程的提高部分,约占教材总篇幅的20%,主要是计算机体系结构方面的基础知识,重点介绍提高计算机系统性能的各种可行思路与基本途径。
在教学环节安排中,需要处理好理论教学和教学实验的关系,可以考虑(并非一定如此)用约四分之三的课内学时(例如48学时)讲授计算机组成与运行机制的核心知识,四分之一的课内学时中的一小部分(例如6学时)用于讲解构建整机系统用到的设计技术和工程实现问题。剩余的部分(例如10学时)和16个实验学时统一安排用于教学实验,在教师的指导下去完成设计实现小计算机硬件系统的核心工作,更好地贯彻理论指导实践,通过实践再进一步深入理解理论的认知过程,做到学习知识和增长能力的双丰收。
本教材配套的有: ①内容详尽的教学实验指导教材; ②教学实验设备(由清华大学科教仪器厂生产销售,型号是TECXPⅡ),选用教材第1~4个知识单元的部件实例组合而成,能够确保课堂授课内容和教学实验项目完美的结合; ③PowerPoint教学课件; ④指令级软件模拟系统,可以直接在PC系统中运行,实现了与硬件设备相同的运行功能。良好的教学实践环境和实验条件,可以有效地加深对课堂教学内容的理解,并使得学生在一定程度上获得开展研究工作和开展计算机硬件系统设计的实际经验,全面提高解决实际问题和创新思维的能力。
本书的第1~3章、第7~13章由宋佳兴修订,第4~6章由王诚修订,作者有多年从事本专业教学和科研工作的经历。
由于时间和作者水平所限,加上时间仓促,书中难免存在不足之处,敬请读者批评指正。
编者2016年6月于清华大学计算机科学与技术系这是第二版前言,不知要否,如果要,就可以用下面的前言FOREWORD作为“21世纪大学本科计算机专业系列教材”,遵照本系列教材评审组专家的意见,本书包括了数字电路基础、计算机组成、计算机体系结构3个部分内容。本书读者对象主要是学习计算机课程的大学生,包括计算机系的学生、软件学院的学生和非计算机专业选修计算机课程的学生。可以根据不同的课程和教学要求,合理分配本教材中3部分内容的课时比例。全书共13章,其中第2章属于先修内容,约占教材总量的7%,若是学生课前未曾学习过数字电路与逻辑设计课程,还是应该用少量学时对教材第2章的内容进行适当讲解;第3~11章是课程的主体部分,约占教材总量的73%,主要是计算机组成方面的知识,重点围绕基本计算机硬件系统5个功能部件的功能和组成进行讲解分析;第12~13章是本课程的提高部分,约占教材总量的20%,主要是计算机体系结构方面的基础知识,重点介绍提高计算机系统性能的各种可行思路与基本途径。其中的指令流水线的浅显内容已经出现在计算机组成原理课程之中,但多数人还是愿意把较为具体深入的指令流水技术安排到计算机系统结构课程中讲授。
针对把计算机组成和系统结构合并成一门课程的情形,教材第3~13章的内容都属于必学知识,建议教学学时安排为70~90学时。若只是用于计算机组成原理课程,计算机体系结构的内容另外开课,则只需讲解第3~11章中的知识,建议教学学时安排为60~70学时。教材主体部分的内容是按照基本通用原理、简明原理示例、典型产品现状这样3个层次来处理的。
基本通用原理是基础,是学习与理解计算机组成与运行机制的核心知识。其特点是稳定性(不随时间变迁而改变)和通用性(不随具体机型而变化),是学生一定要掌握的部分。要把通用原理转化成真实的计算机系统,还有许多技术与工程、性能价格比的平衡关系等需要解决。
在简明原理示例这个层次,强调运用学习到的基本原理知识,学懂或者设计实现一台硬软件基本完整、实现简单(易懂、价廉)、但不一定是最理想(不追求更完备的性能、更好的实用价值)的计算机系统的技术与过程,增加对所学知识的理解深度和应用能力,力求把学习知识和增长实践能力结合起来。
在典型产品现状这个层次,将选择某些典型计算机系统中的实例,给出其设计实现的结果及其外特性,可以体现用到的基本原理,更强调让学生了解计算机当前的技术水平和发展现状。对三个层次的教学要求不尽相同,对优化学生的知识结构各自发挥不同的作用。
在讲解计算机组成和功能时,把通常的文字叙述和语言VHDL描述结合起来,体现计算机的最新设计手段和实现技术,保证教学内容的先进性,并尽量在提高授课质量,降低实验、学习的难度方面做出新的探索。
教材内容具体安排如下。
第1章是全书内容的概述部分,简要介绍计算机组成和体系结构的基本概念,从实现功能的角度来讲解计算机硬件系统的基本组成;从功能和层次的观点来讲解计算机组成和体系结构各自需要研究和解决的问题,并简要说明了本课程的教学目标和对学习方法的建议。
第2章简明讲解数字电路基础知识和几种常用的电路芯片,是为讲解计算机组成和体系结构作电子线路方面的准备,没有这些知识是很难学懂计算机硬件的组成和运行原理的。
第3章的数据表示和运算和第4章的运算器部件共同构成本书核心内容的第1个知识单元。主要围绕计算机硬件系统中承担数据运算功能的部件进行讲解,在给出通用的基本原理知识的同时,还给出运算器部件的具体例子,展示运算器部件的设计过程和实现方法,提升学生的实践能力。
前言计算机组成与体系结构(第3版)第5章的指令系统和第6章的控制器部件共同构成本书核心内容的第2个知识单元。主要围绕计算机硬件系统中承担指挥控制功能的硬连线方案的控制器部件进行讲解,而对微程序控制器只作适当介绍。在给出通用的基本原理知识的同时,还给出控制器部件的具体例子,展示控制器部件的设计过程和实现方法,提升学生的实践能力。
第7章的主存、第8章的高速缓存和虚存以及第9章的辅助存储器设备共同构成本书核心内容的第3个知识单元。主要围绕计算机3级结构的存储器件系统和外存储器设备进行讲解,还给出了通过字、位扩展技术,用存储器芯片构建内存储器的具体例子。
第10章的输入输出设备和第11章的输入输出系统共同构成本书核心内容的第4个知识单元。主要围绕承担计算机的输入输出功能的设备或者部件进行讲解,给出了用于连接计算机各个部件的总线构成的实际例子,具体介绍了串行接口的内部线路的组成和使用方法。
第12章的流水线技术和第13章的并行计算机体系结构共同构成本书核心内容的第5个知识单元。对应计算机体系结构课程的主要知识,针对提高计算机系统的性能,更多地强调基本概念、提出问题的思路和解决问题的方案,基本上止步于定性说明。
通过本教材,学生可以学到数字电路的基础知识,了解某些电路芯片的功能和用法,初步认识到某些逻辑功能是能够使用数字电路实现的;可以从层次的观点,掌握必要的基础知识,计算机组成和运行机制方面的知识,以及必要的专业知识基础,为下一步的学习和进一步提高实际工作能力做好准备;可以从系统的观点,了解计算机体系结构领域的基本知识,理解提高计算机的部件和整机硬件性能的各种可行途径,理解计算机系统中硬件、软件的功能划分和相互配合关系,能站在更高的层次上思考与解决学习、工作中遇到的问题。
为方便教学,本教材配有PowerPoint电子教案。除此之外,还有硬件实现的教学计算机设备,这个设备就是选用本教材第1~4个知识单元的实际例子组合而成的,确保课堂授课内容和教学实验项目能够完美结合。还有内容详尽的教学实验指导书和通过软件模拟实现的相同功能的模拟系统。良好的教学实践环境和实验条件,能够有效地加深对课堂教学内容的理解,并使得学生在一定程度上获得开展研究工作和计算机硬件系统设计的实际经验,全面提高解决实际问题和创新思维的能力。
本书的第1~6章由王诚教授修订,第7~13章由宋佳兴副教授修订,作者有多年从事本专业教学和科研工作的经历。
由于时间和作者水平所限,书中难免存在不足之处,敬请广大读者批评指正。
作者2011年4月于清华大学计算机科学与技术系
序言
名誉主任: 陈火旺主任: 李晓明副主任: 钱德沛焦金生委员: (按姓氏笔画排序)
马殿富王志英王晓东宁洪刘辰
孙茂松李大友李仲麟吴朝晖何炎祥
宋方敏张大方张长海周兴社侯文永
袁开榜钱乐秋黄国兴蒋宗礼曾明
廖明宏樊孝忠秘书: 张瑞庆
本书主审: 李晓明
前言FOREWORD对这一版的书名做了一点变动,增加了“基本原理、设计技术与工程实现”的副标题,特意指出书中提供3类不同性质的教学内容。第一类是计算机组成原理与运行机制的核心知识,属于学生一定要掌握的原理性基础知识,在绝大多数的同类教材中都会重点讲解。第二类是计算机硬件系统的基本设计技术,多数同类教材中讲解不多也欠具体应用实例。第三类是计算机硬件系统的入门性工程实现问题,同类教材中较少涉及,我们希望在这一版的教材中对上述3类内容都有适度的讲解,其中的工程实现问题只在主教材中简单提及,主要部分将放到《计算机组成与体系结构实验指导》教材中。这种安排体现了作者多年坚守的教学理念,从如下3个方面予以说明。
(1) 针对计算机组成原理这一类含有较多技术性、工程性、实践性内容的课程,教学安排不宜过分局限于教师课堂讲课、学生课上听讲和课后背书的学习方式,应该在讲课听课的基础上再较大幅度地加强教学实践环节,增强课程内容的实用性,促成学生用课堂学到的理论知识,设计实现一台组成简单完整、原理清晰实用、实验操作方便、支持汇编语言编程的简小计算机系统,促使学生在学习理论知识、掌握设计技术、提升实践能力等诸方面得到全面成长。
(2) 在讲解计算机硬件系统组成和功能实现时,应该把口语性的一般讲解和硬件描述语言的严谨描述恰当地结合起来,鼓励选用硬件描述语言设计计算机控制器和描述整机系统,既能体现计算机的最新设计技术和实现手段,保证教学内容适度的先进性,又可以培养学生严谨的思维方式和对硬件问题的深入理解和准确阐述,这有利于提高授课质量,降低学习和实验的难度。
(3) 在课程的教学安排中,需要处理好硬件子系统(重点部分)和软件子系统(配合部分)的关系,不能完全局限于硬件系统本身,还需要包含必要的软件内容,汇编语言程序设计应该占有一定分量,加深对硬、软件两类资源各自在计算机系统中的地位和作用的理解。指令系统是连接硬、软件系统的纽带,汇编语言编程有助于深入了解指令系统、计算机整机组成与运行控制机制。因此在教学计算机系统中配备了3个基本程序: PC仿真终端程序、交叉汇编程序、监控程序,对多数同学来说做到会使用它们就够了,鼓励有余力的同学探索这几个程序的实现思路和方法。
本书包括了数字电路基础、计算机组成、计算机体系结构3部分内容,共13章。
第1章是全书内容的概述部分,简要介绍计算机组成和体系结构的基本概念,从实现功能的角度介绍计算机硬件系统的5个功能部件;从功能和层次的观点来讲解计算机组成和体系结构各自需要研究和解决的问题,并简要说明了本课程的教学目标和对学习方法的建议。
第2章简明讲解数字电路基础知识和几种常用的电路芯片,是为讲解计算机组成和体系结构做电子线路方面的准备,没有这些知识是很难学懂计算机硬件的组成和运行原理的。
第3章的数据表示和运算、第4章的运算器部件共同构成本书核心内容的第1个知识单元,主要围绕承担数据运算功能的运算器部件进行讲解,在给出通用的基本原理知识的同时,还提供了设计实现一个原理性的8位运算器模型和一个4位位片结构的运算器芯片两个实例,展现运算器部件的设计过程和实现方法,提升学生的实践能力。
前言计算机组成与体系结构(第3版)第5章的指令系统和第6章的控制器部件共同构成本书核心内容的第2个知识单元,主要围绕指令格式选择、指令系统设计,以及硬件系统中的硬布线方案的控制器部件进行讲解,而对微程序方案控制器只作适当介绍。在给出通用的基本原理知识的同时,提供了一套简单实用的基本指令系统。硬件方面,选用多指令周期方案实现这套指令系统的控制器部件的具体例子,展现控制器部件的设计过程和实现方法,提升学生的实践能力。软件方面,使用这套指令系统设计了教学机的监控程序,可以支持汇编语言程序设计;若再扩展一部分指令,也可以支持解释执行的BASIC高级语言程序设计,能支持浮点数运算和多种基本数学函数运算。针对这门课程的教学要求来说,此时的教学机的硬软件系统已经比较完整,包括了计算机硬件软件系统全部6个层次的基本内容。
第7章的主存、第8章的高速缓存和虚存、第9章的辅助存储器设备共同构成本书核心内容的第3个知识单元,主要围绕计算机3级结构的存储器件系统和外存储器设备进行讲解,还给出了通过字、位扩展技术,用静态芯片构建内存储器部件的具体例子,支持存储器与CPU同步运行,展现内存储器的功能和经总线连接CPU的具体方法。
第10章的输入输出设备和第11章的输入输出系统共同构成本书核心内容的第4个知识单元,主要围绕承担计算机的输入输出功能的设备或者部件进行讲解,给出了用于连接计算机各个部件的单总线结构的实际例子,具体介绍了串行接口的内部线路组成和使用方法,并通过串口连接PC仿真终端,选用程序查询方式控制入出设备,使教学机整机系统具备了输入输出操作功能。
第12章的流水线技术和第13章的并行计算机体系结构共同构成本书核心内容的第5个知识单元,对应计算机体系结构课程的基础知识,针对提高计算机系统的性能,更多地强调基本概念、提出问题的思路和解决问题的方案,基本上止步于定性说明。
教学过程中,可以根据不同的课程安排和教学要求,合理分配教材中3部分内容的课时比例。针对把计算机组成和系统结构合并成一门课程的安排,教材第3~13章的内容都属于必学知识,建议教学学时安排为70~90。若只是用于计算机组成原理课程,计算机体系结构的内容另外开课,则只需讲解第3~11章中的知识,建议课内学时安排为60~70,另外安排约16个实验学时。
第2章用于复习先修课程的内容,简明介绍数字电路与逻辑设计知识,约占教材总篇幅的7%,是学习计算机组成和体系结构一定会用到的电路基础知识,也许要求并不太多也不深,但如果完全不了解这些内容,要听懂课堂授课内容难度很大,设计实现一个小计算机系统更无从谈起。
第1章、第3~11章是课程的主体部分,约占教材总篇幅的73%,主要是计算机组成方面较为完整的系统知识,重点围绕基本计算机硬件系统5个功能部件的功能和组成进行分析讲解。
第12章和第13章是本课程的提高部分,约占教材总篇幅的20%,主要是计算机体系结构方面的基础知识,重点介绍提高计算机系统性能的各种可行思路与基本途径。
在教学环节安排中,需要处理好理论教学和教学实验的关系,可以考虑(并非一定如此)用约四分之三的课内学时(例如48学时)讲授计算机组成与运行机制的核心知识,四分之一的课内学时中的一小部分(例如6学时)用于讲解构建整机系统用到的设计技术和工程实现问题。剩余的部分(例如10学时)和16个实验学时统一安排用于教学实验,在教师的指导下去完成设计实现小计算机硬件系统的核心工作,更好地贯彻理论指导实践,通过实践再进一步深入理解理论的认知过程,做到学习知识和增长能力的双丰收。
本教材配套的有: ①内容详尽的教学实验指导教材; ②教学实验设备(由清华大学科教仪器厂生产销售,型号是TECXPⅡ),选用教材第1~4个知识单元的部件实例组合而成,能够确保课堂授课内容和教学实验项目完美的结合; ③PowerPoint教学课件; ④指令级软件模拟系统,可以直接在PC系统中运行,实现了与硬件设备相同的运行功能。良好的教学实践环境和实验条件,可以有效地加深对课堂教学内容的理解,并使得学生在一定程度上获得开展研究工作和开展计算机硬件系统设计的实际经验,全面提高解决实际问题和创新思维的能力。
本书的第1~3章、第7~13章由宋佳兴修订,第4~6章由王诚修订,作者有多年从事本专业教学和科研工作的经历。
由于时间和作者水平所限,加上时间仓促,书中难免存在不足之处,敬请读者批评指正。
编者2016年6月于清华大学计算机科学与技术系这是第二版前言,不知要否,如果要,就可以用下面的前言FOREWORD作为“21世纪大学本科计算机专业系列教材”,遵照本系列教材评审组专家的意见,本书包括了数字电路基础、计算机组成、计算机体系结构3个部分内容。本书读者对象主要是学习计算机课程的大学生,包括计算机系的学生、软件学院的学生和非计算机专业选修计算机课程的学生。可以根据不同的课程和教学要求,合理分配本教材中3部分内容的课时比例。全书共13章,其中第2章属于先修内容,约占教材总量的7%,若是学生课前未曾学习过数字电路与逻辑设计课程,还是应该用少量学时对教材第2章的内容进行适当讲解;第3~11章是课程的主体部分,约占教材总量的73%,主要是计算机组成方面的知识,重点围绕基本计算机硬件系统5个功能部件的功能和组成进行讲解分析;第12~13章是本课程的提高部分,约占教材总量的20%,主要是计算机体系结构方面的基础知识,重点介绍提高计算机系统性能的各种可行思路与基本途径。其中的指令流水线的浅显内容已经出现在计算机组成原理课程之中,但多数人还是愿意把较为具体深入的指令流水技术安排到计算机系统结构课程中讲授。
针对把计算机组成和系统结构合并成一门课程的情形,教材第3~13章的内容都属于必学知识,建议教学学时安排为70~90学时。若只是用于计算机组成原理课程,计算机体系结构的内容另外开课,则只需讲解第3~11章中的知识,建议教学学时安排为60~70学时。教材主体部分的内容是按照基本通用原理、简明原理示例、典型产品现状这样3个层次来处理的。
基本通用原理是基础,是学习与理解计算机组成与运行机制的核心知识。其特点是稳定性(不随时间变迁而改变)和通用性(不随具体机型而变化),是学生一定要掌握的部分。要把通用原理转化成真实的计算机系统,还有许多技术与工程、性能价格比的平衡关系等需要解决。
在简明原理示例这个层次,强调运用学习到的基本原理知识,学懂或者设计实现一台硬软件基本完整、实现简单(易懂、价廉)、但不一定是最理想(不追求更完备的性能、更好的实用价值)的计算机系统的技术与过程,增加对所学知识的理解深度和应用能力,力求把学习知识和增长实践能力结合起来。
在典型产品现状这个层次,将选择某些典型计算机系统中的实例,给出其设计实现的结果及其外特性,可以体现用到的基本原理,更强调让学生了解计算机当前的技术水平和发展现状。对三个层次的教学要求不尽相同,对优化学生的知识结构各自发挥不同的作用。
在讲解计算机组成和功能时,把通常的文字叙述和语言VHDL描述结合起来,体现计算机的最新设计手段和实现技术,保证教学内容的先进性,并尽量在提高授课质量,降低实验、学习的难度方面做出新的探索。
教材内容具体安排如下。
第1章是全书内容的概述部分,简要介绍计算机组成和体系结构的基本概念,从实现功能的角度来讲解计算机硬件系统的基本组成;从功能和层次的观点来讲解计算机组成和体系结构各自需要研究和解决的问题,并简要说明了本课程的教学目标和对学习方法的建议。
第2章简明讲解数字电路基础知识和几种常用的电路芯片,是为讲解计算机组成和体系结构作电子线路方面的准备,没有这些知识是很难学懂计算机硬件的组成和运行原理的。
第3章的数据表示和运算和第4章的运算器部件共同构成本书核心内容的第1个知识单元。主要围绕计算机硬件系统中承担数据运算功能的部件进行讲解,在给出通用的基本原理知识的同时,还给出运算器部件的具体例子,展示运算器部件的设计过程和实现方法,提升学生的实践能力。
前言计算机组成与体系结构(第3版)第5章的指令系统和第6章的控制器部件共同构成本书核心内容的第2个知识单元。主要围绕计算机硬件系统中承担指挥控制功能的硬连线方案的控制器部件进行讲解,而对微程序控制器只作适当介绍。在给出通用的基本原理知识的同时,还给出控制器部件的具体例子,展示控制器部件的设计过程和实现方法,提升学生的实践能力。
第7章的主存、第8章的高速缓存和虚存以及第9章的辅助存储器设备共同构成本书核心内容的第3个知识单元。主要围绕计算机3级结构的存储器件系统和外存储器设备进行讲解,还给出了通过字、位扩展技术,用存储器芯片构建内存储器的具体例子。
第10章的输入输出设备和第11章的输入输出系统共同构成本书核心内容的第4个知识单元。主要围绕承担计算机的输入输出功能的设备或者部件进行讲解,给出了用于连接计算机各个部件的总线构成的实际例子,具体介绍了串行接口的内部线路的组成和使用方法。
第12章的流水线技术和第13章的并行计算机体系结构共同构成本书核心内容的第5个知识单元。对应计算机体系结构课程的主要知识,针对提高计算机系统的性能,更多地强调基本概念、提出问题的思路和解决问题的方案,基本上止步于定性说明。
通过本教材,学生可以学到数字电路的基础知识,了解某些电路芯片的功能和用法,初步认识到某些逻辑功能是能够使用数字电路实现的;可以从层次的观点,掌握必要的基础知识,计算机组成和运行机制方面的知识,以及必要的专业知识基础,为下一步的学习和进一步提高实际工作能力做好准备;可以从系统的观点,了解计算机体系结构领域的基本知识,理解提高计算机的部件和整机硬件性能的各种可行途径,理解计算机系统中硬件、软件的功能划分和相互配合关系,能站在更高的层次上思考与解决学习、工作中遇到的问题。
为方便教学,本教材配有PowerPoint电子教案。除此之外,还有硬件实现的教学计算机设备,这个设备就是选用本教材第1~4个知识单元的实际例子组合而成的,确保课堂授课内容和教学实验项目能够完美结合。还有内容详尽的教学实验指导书和通过软件模拟实现的相同功能的模拟系统。良好的教学实践环境和实验条件,能够有效地加深对课堂教学内容的理解,并使得学生在一定程度上获得开展研究工作和计算机硬件系统设计的实际经验,全面提高解决实际问题和创新思维的能力。
本书的第1~6章由王诚教授修订,第7~13章由宋佳兴副教授修订,作者有多年从事本专业教学和科研工作的经历。
由于时间和作者水平所限,书中难免存在不足之处,敬请广大读者批评指正。
作者2011年4月于清华大学计算机科学与技术系
文摘
第5章指令系统和汇编语言程序设计指令是指示计算机执行某项运算或操作功能的命令。一台计算机使用的全部指令组成这台计算机的指令系统。指令系统处于硬件和软件的交界面上,它被划分为精简指令系统(RISC)和复杂指令系统(CISC)两大类。从用户的角度看,指令用于编写程序,是用户使用与控制计算机运行的最小功能单位;从计算机的组成和功能来看,计算机硬件系统是用于实现每条指令功能的实际设备,因此硬件系统只能直接识别和运行由机器指令构成的程序,指令系统直接与计算机的运行性能和硬件结构密切相关,是设计一台计算机的起始点和基本依据。
本章重点讲授计算机的指令、指令系统和汇编语言程序设计这3项内容。
5.1指令格式和指令系统概述[*2]5.1.1指令的定义和指令格式计算机系统由硬件和软件两个子系统组成。硬件是指构成计算机的中央处理机、主存储器、输入输出设备等物理装置。软件则指由软件厂家为方便用户使用计算机而提供的系统软件和用户用于完成自己的特定事务和信息处理任务而设计的用户软件。计算机硬件能直接识别和运行的软件程序通常由该计算机的指令代码序列组成。
1. 指令的定义
用于组成计算机程序、指示计算机硬件执行某项运算或操作功能的命令叫作指令,在计算机内部它是用一定长度的二进制位串来表示的。一台计算机支持(或称使用)的全部指令构成该机的指令系统。指令系统对计算机用户和计算机厂家都有着非常重要的影响。指令是设计计算机程序的最小功能单位,计算机厂家需要在计算机硬件系统中实现每一条指令的功能,用指令设计各种系统软件,指令系统直接与计算机系统的运行性能、硬件结构的复杂程度等密切相关,它是设计一台计算机的起始点和基本依据。
早期的计算机,从简化计算机硬件结构、降低成本考虑,指令系统都比较简单,指令条数少、运算功能弱,能处理的数据只是定点小数,使用相当困难。到了20世纪六七十年代,随着集成电路和超大规模集成电路的出现与发展,计算机硬件成本直线下降,相应的软件成本所占比例迅速增加,计算机的指令系统日渐变得更加复杂和完备,指令条数多达300~500条,寻址方式也多达十几种,能直接处理的数据类型更多,构成了复杂指令系统的计算机。……在CISC计算机中,有80%的功能更强、实现起来更为复杂的指令却较少被使用,在程序运行的过程中只占到20%的时间,有80%的程序运行时间使用的是另外20%的功能简单、实现容易的指令。据此提出了简化指令系统的计算机的概念并予以实现,只选用几种简单的寻址方式和最常用的几十条指令,充分考虑了超大规模集成电路设计、制造中的有关问题,吸收当前软件研究的各项成果,从硬、软件结合的角度解决了许多矛盾,设计制造出运行性能更高的RISC计算机系统。它虽然有明显的优势,但不能完全取代CISC计算机系统,考虑到此前已有的大量软件资源是应用CISC结构的指令系统实现的,CISC计算机仍有其存在的理由。
指令系统和汇编语言程序设计第 5 章计算机组成与体系结构(第3版)要确定一台计算机的指令系统并评价其优劣,通常应从如下4个方面考虑。
(1) 指令系统的完备性,常用指令齐全,编程方便。
(2) 指令系统的高效性,程序占内存空间少,运行速度快。
(3) 指令系统的规整性,指令和数据使用规则统一简单,易学易记。
(4) 指令系统的兼容性,同一系列的低档计算机的程序能在新的高档机上直接运行。
要完全同时满足上述标准是困难的,但它可以指导我们设计出更加合理的指令系统。设计指令系统的核心问题是选定指令的功能和格式。指令的格式与计算机的字长、期望的存储器容量和读写方式、支持的数据类型、计算机硬件结构的复杂程度和追求的运算性能等有关,这些内容中的某些部分超出了我们的教学内容范围,请有兴趣者参阅其他资料。
2. 指令格式
通常情况下,一条指令要由如图5.1所示的两部分内容组成。
图5.1一条指令的组成第一部分是指令的操作码。操作码用于指明本条指令的运算和操作功能,例如,是算术加运算、减运算还是逻辑与运算、或运算功能,是否是读、写内存或读、写外设操作功能,是否是程序转移和子程序调用或返回操作功能等。计算机需要为每条指令分配一个确定的操作码。
第二部分是指令的操作数地址。用于给出被操作的信息(指令或数据)的地址,包括参加运算的一个或多个操作数所在的地址,运算结果的保存地址,程序的转移地址,被调用的子程序的入口地址等。
在一条指令中,如何安排指令字的长度,即使用多少个二进制位(bit)表示一条指令,又如何分配指令字中这两部分所占用的位数(长度),如何安排操作数的个数,如何表示和使用一个操作数的地址(寻址方式),是要认真对待、精心设计的重要问题。寻址方式将单独放在5.2 节讲解,其余内容在本节的下面部分分别介绍。
5.1.2操作码的组织与编码
计算机的字长是由选用的数据的类型及其表示所用的二进制位数决定的,通常是2、4、8个字节。指令字的长度,多数情况下就确定为计算机的字长,即一条指令占用计算机的一个内存字,但并不强制要求所有指令的字长都相同,以便提高计算机资源利用率。例如,在一个内存字中,可以考虑存放几条很短的指令;长的指令也可能占用多个内存字,例如在字长较短的计算机系统中,某些指令需要选用双字指令格式,保存这样的一条指令就要使用两个内存字。
从对指令操作码的组织与编码所选用的方案分类,可以区分出如下2种处理情况。这里只是简单介绍一些基本概念,更详细的内容到5.3节会清楚地看到。
……
(2) 变长的操作码的组织方案。当计算机的字长与指令长度为16位或8位时,单独为操作码划分出固定的多位后,留给用于表示操作数地址的位数就会严重不足。为此不得不对一个指令字的每一个二进制位的使用精打细算,使一些位(bit)在不同的指令中有不同的作用。例如,在一些指令中,这些位用作操作码;而在另外一些指令中,这些位又被用作操作数的地址。则不同指令的操作码长度就会不同,即尽量为那些最常用(程序中使用频率高)、用于表示操作数地址的位数要求又较多的指令,适当少分配几位操作码(当然能表示的指令条数也就少);而对那些表示操作数地址的位数要求较少的指令多分配几位操作码;对那些无操作数的指令,整个指令字的全部位都用作操作码,力争在比较短的一个指令字中,既能表示出比较多的指令条数,又能尽量满足给出相应的操作数地址的要求,如PDP11计算机就选用这种方案。我们设计实现的用于硬件课程教学的8位字长的计算机就选用变长的操作码。
5.1.3有关操作数的类型、个数、来源、去向和地址安排
在计算机指令中,可以直接使用的基本数据类型通常包括逻辑类型(bit),字符和字符串类型、整数类型(integer)、浮点数类型(floating)等,需要结合指令的操作码来判断数据类型并完成相应的运算处理。使用这几个基本的数据类型还能构造出高级语言中的更为复杂的复合数据类型,这些复合数据类型不能出现在基本的机器指令中。
不同的指令使用不同数目、不同来源去向、不同用法的操作数,必须把它们统一起来,并安排在指令字的数据地址字段。
从用到的操作数个数区分,可能有如下4种情况。
(1) 无操作数指令。有的指令不涉及操作数,或使用约定的某个(些)操作数,既已约定则没有必要再在指令中加以表示,称这类指令为无操作数指令。它仅有操作码部分,例如停机指令、空操作指令、关中断指令、堆栈结构的计算机系统中对堆栈中数据运算的指令等。
……
(3) 双操作数指令。对于常用的算术和逻辑运算指令,往往要求使用两个操作数,这两个操作数往往保存在两个寄存器中,需分别给出目的寄存器和源寄存器的编号,其中目的寄存器还用于保存本次的运算结果。在寄存器与主存储器之间完成数据传送的指令,也需要给出寄存器编号和主存储器地址。称这类指令为双操作数指令。
(4) 多操作数指令。另外一些指令可能使用多个操作数,如3个操作数,其中两个操作数地址分别给出两个源操作数的地址,第三个操作数地址是用于给出保存本次运算结果的目的操作数地址,可以称这类指令为三操作数指令;在有些性能更高的计算机(甚至PC机)中,还有在指令中使用更多个操作数地址的指令,用于完成对一批数据的处理过程,如字符串复制指令,向量、矩阵运算指令等,称这类指令为多操作数指令。
上述4种情况中的前3种,由于其具有指令字长可以相对较短、执行速度较高、计算机硬件结构可以相对简单等优点,在各种不同类型的计算机中被广泛应用;相对而言,最后一种更多地用在字长较长的大中型计算机中。
请注意,指令的操作数地址字段有时也用于给出指令的地址,例如,转移指令的转移目标地址、子程序的入口地址等。
在设计实现实际的指令系统时,还有一些问题需要处理,暂不赘述。
从操作数的来源、去向及其在指令字中的地址安排考虑,有多种情况。
这里说的操作数的来源、去向,是指表示在指令中操作数要从哪里读来、写向哪里去。
下面讨论操作数的来源、去处和地址安排。
可以把指令中的操作数的来源、去向归纳为如下4种主要情况。
(1) 操作数的第一个来源、去向,可以是CPU 内部的通用寄存器,此时应在指令字中给出用到的寄存器编号(寄存器名)。通用寄存器的数量一般为几个、十几个,一二百个,故在指令字中须为其分配2、3、4、5或更多一点的位数来指明一个寄存器。该寄存器中的内容,可以是指令运算用到的数据,也可能用作一个操作数或者指令的地址,或计算主存储器地址的相关信息。
(2) 操作数第二个来源、去向,是外围设备(接口)中的一个寄存器。通常用设备编号、或设备入出端口地址、或设备映像地址(与内存储器地址统一编址的一个设备地址编号)来表示。设备编号或设备入出端口地址用的位数不会太多,通常可以在第一个指令字中直接给出。设备映像地址与一个内存单元地址的处理办法类同,到5.2节具体说明。
(3) 操作数的第三个来源、去向,是内存储器的一个存储单元,此时应在指令字中给出该存储单元的地址。由于许多计算机用到的内存地址的位数就是一个机器字的长度,要在一个指令字中既给出操作码、有关寄存器编号等信息,又直接给出这一内存地址是困难的,再加上还有采用多种不同方式读写内存的需求,这就需要找到解决这些问题的完整方案。将单独在5.2节来详细说明具体解决方案。
(4) 操作数的第四个来源是指令字中的某个字段的内容。它可能就是一个运算要用到的数据,或适当处理后形成用于数据运算、存储器地址计算的一个数据。
5.1.4指令的分类
一台计算机的指令系统往往由几十条到几百条指令组成。可以从不同的角度对这些指令进行分类。如前一节讲的就是按指令中使用的操作数个数来分类的,但更常用的还是按指令所完成的功能进行分类,由于不同人对指令功能划分的标准并不完全相同,其分类结果也就会有所差异,我们给出如下分类的例子。
(1) 算术与逻辑运算类指令是每台计算机都必须具有的指令,它通常完成对一或两个数据的算术运算或逻辑运算功能。不同档次、不同性能的计算机所能加工、运算的数据类型(整数、浮点数、十进制数等)和支持的运算功能(加、减、乘、除、变符号等)的完备程度可以有所差异,但一般都必须给出算术与逻辑运算的结果,以及结果的有关特征。
……
(3) 数据传送类指令用于实现通用寄存器之间、通用寄存器与内存储器存储单元之间(通常也可以单独称其为存储器读写指令)、内存储器不同的存储单元之间、通用寄存器与外围设备(接口)之间(有些场合也可以单独划分为输入/输出指令)的数据传送功能。从内存储器和外围设备(接口)操作性质的不同,又可以区分为读和写操作两种,它指明数据传送的方向,数据从内存或外围设备传送到CPU,或者数据从CPU传送到内存或外围设备。
(4) 转移类指令用于解决变动程序中指令执行次序(程序执行流程)的需求。转移指令是一种改变程序中指令执行次序的指令。程序中的指令,大部分是按指令排列的自然次序顺序执行,但有时候又要求不执行邻接的下一条指令,而是转移到另一段程序入口处开始执行,此时就会用到一条转移指令。转移指令又被区分为无条件转移和条件转移两类。二者的相同之处是都必须在指令中给出转移地址。不同之处是,条件转移指令还必须在指令中给出判断是否执行转移所依据的条件,仅在条件为真时才执行转移,否则顺序执行;而无条件转移指令一定执行转移。
(5) 子程序调用指令与返回指令可以被理解为一种特定的转移指令。二者要配合使用,通过子程序调用指令,使一段被称为子程序的特定程序段投入运行,而该程序段的最后一条指令,一定是一条子程序返回指令,它会在子程序运行结束后,确保转移回到主程序中排在子程序调用指令之后的那条指令处接着执行。而一般的转移指令,并不涉及再返回来的问题。再深入一步讲,子程序又可以被分为用户自己编写的子程序和软件系统提供的子程序两大类,这后一部分又被称为访问系统程序(访管)指令、陷阱(TRAP)指令。
(6) 特权指令是指仅用于操作系统或其他系统软件的指令,为确保系统与数据安全起见,这一类指令不提供给用户使用。这一类指令主要用于管理与分配系统资源,包括改变系统的工作方式,完成任务的创建或切换,变更管理存储器用的段表和页表中的内容等。特权指令对多用户或多任务系统是必要的。
(7) 其他指令,如动态停机指令、空操作指令、置条件码指令、开中断指令、关中断指令、堆栈操作指令等,用于完成某些特定的处理功能。
5.1.5指令周期及其对计算机性能和硬件结构的影响
本节内容要到第6章控制器部件的相关章节详细讲解,先在这里简单介绍有关指令周期和指令执行步骤两个基本概念。
通常把执行一条指令所用的时间叫作指令周期。一个指令周期往往要包含几个执行步骤,就是说,一条指令的完整功能需要依次经过这几个步骤的操作才能完成。例如在MIPS计算机系统中,一个指令周期可能包括读取指令、指令译码和读寄存器组、ALU执行运算、读写内存或接口、数据写回寄存器组这5个步骤,如图5.2所示。
图5.2指令的5个执行步骤
所有指令都是在取指—译码—执行(包括第(3)~(5)步)的循环中完成的。
(1) 读取指令是每一条指令必须首先完成的,所完成的功能对所有指令都相同。
(2) 指令译码完成的功能对多数的指令是类似的,例如判断指令类型、读寄存器组等。
(3) ALU执行运算所完成的是数据计算或者地址计算功能,对不同指令会有所差别。
(4) 读写内存或接口仅出现在读写内存或者读写接口指令的执行过程中。
(5) 数据写回完成把ALU的计算结果或从内存、接口读来的数据写入寄存器组。
需要注意,这5个执行步骤的前后次序是有内在联系的,每一步都会作为下一步运行的前提,不能随意变动。第1步的读取指令是后续各步骤运行的前提,只有在取得指令之后才能够知晓接下来应该完成的是什么运算处理功能、使用哪几个数据、需要怎样完成运算处理等;在第1步中还可以计算出下条相邻指令所在的存储单元地址。
在得到指令内容之后,第2步就可以检查、判别指令类型、指令操作码等。这主要体现为对指令的操作码字段内容进行译码;大部分指令执行过程中会用到寄存器组内的1~2个寄存器的内容,要在此步骤把它们读出来,作为下一步ALU执行计算的原始数据。
第3步是ALU执行运算,对于寄存器之间的数据运算等指令,完成的是对数据的运算、比较、移位等操作。运算结果通常需要写回到寄存器组的一个寄存器中,在这里已把写回操作移到更后面的一个步骤中去完成,在本步骤将把计算结果暂存到一个专用寄存器中。对存储器读写指令,ALU完成的是计算数据在存储器中的单元地址,而真正的存储器读写操作需要放到再下一个步骤中去完成。对转移等指令,ALU完成的是计算转移指令的目标地址。
第4步用于完成存储器读写功能,使用第3步计算得到的存储器地址选中的一个存储单元完成数据读写。写内存指令用于把指定的一个寄存器的内容写入选定的存储单元,读内存指令用于把选定的存储单元的内容读出来并暂存在一个专用的寄存器中,而真正写入到通用寄存器中的操作需要放到再下一个步骤中去完成。
第5步用于把第3步ALU运算的数据结果(已暂存在一个专用寄存器中)或者第4步从存储器中读出来的数据(已暂存在一个专用寄存器中)写入到指令指定的通用寄存器中。
综上所述,数据运算指令需要依次经过第1、2、3、5这4个步骤完成,写存储器指令需要依次经过第1~4这4个步骤完成,而读存储器指令需要依次经过第1~5这5个步骤完成。另外一些指令也可能经过第1~2这2个步骤或者经过第1~3这3个步骤完成。
初步结论,并不是所有的计算机都必须把一条指令的执行过程划分为这样的5个步骤,也不见得每一条指令都必须经过全部这5个步骤才能完成。例如,功能简单的指令可能只用到前第2和第3个步骤,另外一些指令可能还用到后面的第4和第5个步骤。在计算机内部,从如何选择、处理这5个执行步骤的角度来看,有以下3种方案,每个方案对指令执行速度和计算机硬件实现的复杂程度等有较大影响。
第1种方案,不管指令功能的复杂程度,让所有指令都经过这5个时间段完成,即全部指令都选用同一种指令周期,从而构成单指令周期的CPU系统。此时必须依照功能最复杂、执行用时最长的指令的运行要求来确定指令周期的长度,否则系统运行会出错。……结论是: 这种方案理论上可行,现实中不实用。
第2种方案,依据不同指令功能的繁简程度来分别确定各自的指令周期,指令需要几个执行步骤完成就为它分配几个步骤,此时可能有分别用2个步骤、3个步骤、4个步骤或5个步骤完成的指令,此而构成多指令周期的CPU系统。这一方案明显优于前一方案,指令执行速度和硬件部件的资源利用率更高,是一种较为实用的方案。
第3种方案,属于指令流水线的CPU系统,它的着眼点是进一步提高指令的执行速度。思路在于尽可能地在指令的每一个执行步骤都启动一条新指令,使程序中几条相邻指令的执行时间尽可能地重叠起来,就像工业生产中的流水线,故称指令流水线。它与前2种方案有明显区别。前2种方案实现的是指令的串行执行,即前一条指令完成之前不会启动下一条指令,在任何时间都只有一条指令处在运行中,而在指令流水的CPU系统中,当确定采用5个步骤的指令流水线时,理想情况可能有5条指令各自处在5个不同的步骤中,其理想情况可以做到每一个执行步骤都会有一条指令结束执行过程。这种方案会使得硬件设计与实现更复杂一些,但带来了更高的性能价格比,是目前被广泛选用的、最为实用的方案。
5.2基本寻址方式概述
寻址方式解决的是如何在指令中表示一个操作数的地址和指令地址,如何用这种表示得到操作数或怎样计算出操作数的地址。表示在指令中的操作数地址,通常被称为形式地址;用这种形式地址并结合某些规则,可以计算出操作数在存储器中的存储单元地址,这一地址被称为数据的物理(有效)地址。计算机中常用的基本寻址方式有以下8种类型。
1. 立即数寻址
操作数直接给出在指令字中,即指令字中直接给出的不再是操作数地址,而是操作数本身。它的主要用法是把一个确定的数值传送到一个通用的寄存器中,或直接用于运算。当该数据占用的位数较少时(如小的整数、一个西文字符),可把该数值安排在第一个指令字中,则在读出指令的同时也得到相关数据;否则只能将其存放在指令的第二个字中,这就构成了双字指令,如图5.3所示。双字指令不利于指令流水,很少出现在RISC计算机的指令系统中。
图5.3立即数寻址
2. 直接寻址
直接寻址是在指令中直接给出操作数在存储器中的地址。这是计算机中可用的寻址方式之一。与立即数寻址方式类似,当该地址占用的位数较少时(能访问的存储空间范围较小),可将其安排在第一个指令字中,则在读出指令的同时也得到相关地址,否则只能用双字指令实现,如图5.4所示。更多情况下采用的是变址等其他寻址方式提供内存单元地址。
图5.4直接寻址
3. 寄存器寻址、寄存器间接寻址
寄存器寻址是在指令字中给出通用寄存器的编号(名字、地址),所访问的寄存器的内容就是运算用到的数据。由于表示一个通用寄存器编号占用的位数少,有利于缩短指令字的长度;用寄存器暂存数据并用于完成运算速度更快,故这是最基本最常用的寻址方式。
寄存器间接寻址,在寄存器中给出的不是操作数,而是操作数在存储器中的地址,这被称为寄存器间接寻址,这也是最常用的寻址方式之一,如图5.5所示。
图5.5寄存器间接寻址
4. 变址寻址
变址寻址是把在指令字中给出的一个数值(称为变址偏移量)与一个被称为变址寄存器的内容相加之和作为操作数的地址,用于读写存储器,如图5.6所示。它特别适合于处理数组型数据。有些计算机,更设置了自动对变址寄存器内容自动增1和减1的操作功能。与立即数寻址方式类似,依据变址偏移量的范围大小,变址指令可能为单字或双字两种情况。
图5.6变址寻址
5. 相对寻址
相对寻址是指把在指令字中给出的一个数值(称为相对寻址偏移量)与程序计数器PC的内容相加之和作为操作数的地址或转移指令的转移地址,如图5.7所示。相对寻址偏移量决定目标地址与当前指令的地址距离是多少,相对寻址偏移量可以为正值或负值,可以有不同的取值范围,可能只占一个指令字的一部分(一个字段),其转移的地址范围小,或单独占用一个计算机字,则可以转移到存储器的任何位置,故相对寻址指令也有单字与双字之分。
图5.7相对寻址
6. 基地址寻址
基地址寻址是指把在程序中所用的地址与一个特定的寄存器(称为基地址寄存器)的内容相加之和作为操作数的地址或指令的地址。它与变址寻址、相对寻址形式上有某些类似之处,但其用法却与二者有很大差别,主要用于为多道程序或浮动地址程序定位存储器空间。
7. 间接寻址
间接寻址,在指令字中给出的不是一个操作数的地址,而是一个操作数地址的地址,或一条指令地址的地址。采用间接寻址读写数据需两次访问存储器,速度较慢,少用为好,如图5.8所示。
图5.8间接寻址
间接寻址的形式地址可以有多种不同方案,图5.8中所给出的只是一个最简单的例子。
8. 堆栈寻址
堆栈是存储器中(或专用寄存器组)一块特定的按“后进先出”原则管理的存储区。该存储区中被读写单元的地址是用一个特定的寄存器给出的,该寄存器被称为堆栈指针(Stack Pointer,SP)。如果有些指令,其操作码部分已经指明一个操作数为堆栈中的一个单元(通常为堆栈栈顶)的内容,则它就已经约定将使用SP访问该单元,故不必在指令的地址字段中另加指定。在采用堆栈结构的计算机系统中,大部分指令表面上都表现为无操作数指令的形式。通常情况下,在读写堆栈中的一个单元的前后,都伴有自动完成对SP内容的增量或减量操作。
请注意,操作数地址字段也被用于给出指令地址,例如转移指令的转移目标地址,子程序的入口地址等。
上述8种寻址方式,是计算机中常用的基本寻址方式,可以单独使用,也可以把它们中的某几种组合在一起,如变址后再间接寻址,变址与基地址寻址的组合,间接寻址还可以连续多次执行等。此外,不是每一台计算机都使用所有的寻址方式,也不一定要把寻址方式设计得很复杂,简单的寻址方式可以使计算机系统有更高的运行效率。
5.3指令系统举例
计算机的指令系统有RISC和CISC两种类型。RISC是20世纪80年代出现的全新概念的计算机系统。它以精简高效的指令系统、精巧高速的硬件组成、精妙智能的编译软件,达到了低价与高性能的理想目标,也就是说,执行同样处理功能的程序所占用的时间要比CISC计算机更短。请看公式: P=I×CPI×T,符号P表示执行一个程序所用的时间,它由该程序中包含的机器指令的总条数I,执行一机器指令所需要的机器周期数CPI,每个机器周期的时间长度T这3个数值的乘积决定。这3个数值在RISC和CISC两种机器中有比较大的差距,如表5.1所示, RISC机器的运行性能可能要比CISC机器高2~5倍。表5.1RISC和CISC的对比ICPITICPITRISC1.2~1.41.3~1.7<1CISC14~101RISC计算机的指令格式规范且种类少,使用的寻址方式简单,指令条数少,指令完成的操作功能简单。大量的统计结果表明,在CISC机器的所有指令中,功能简单、所用硬件更节省的约20%的指令,将占用程序80%的运行时间;反过来说,另外的约80%的功能更复杂、硬件实现代价很高的指令并不被经常使用。到了RISC计算机中,更倾向选用软件子程序来实现这些指令的功能,使硬件实现变得更为精简,运行速度更快。RISC计算机追求的目标之一,就是使指令每一步操作所用的时间要尽可能短,并且力争在每个执行步骤都能完成一条指令的执行过程。同时尽力在编译程序中增强性能优化能力,从硬件软件两个方面来提高RISC计算机的性能。
下面介绍4种计算机的指令系统实例。在这几个指令系统中,指令操作码部分的组织和编码,操作数地址字段的设计方案各有一定的代表性。其中Pentium Ⅱ计算机的指令系统属于典型的CISC结构;MIPS32计算机的指令系统属于典型的RISC结构;PDP11计算机的指令格式,长度扩展的指令操作码和规范、别致的寻址方式是它的突出特点;上述3种指令系统更多地用于开阔眼界,扩展学生的知识面。教学计算机的指令系统是由本书作者专门为计算机组成原理课程的教学和实验而设计的,指令格式简明规范,既有多种基本寻址方式、比较齐全的常用指令,又有配套的汇编语言支持,这套指令与多数人较为熟悉的Intel 8086计算机的指令有某些类似但更为简化,选用这套指令系统设计、实现了多个型号的教学实验设备,在本教材中说到的教学计算机更多地针对TECXPⅡ这个型号。教学计算机的指令系统将在教学的各个环节中反复用到,更多地关注一些是必要的。
5.3.1Pentium Ⅱ计算机的指令系统
Pentium计算机是应用面较广、影响力较大的个人计算机,其指令系统有一定的典型性。这里更多地介绍它的指令格式和选用的寻址方式,给出部分指令而不是完整的指令集。Pentium Ⅱ计算机的指令格式如图5.9所示。
图5.9Pentium Ⅱ的指令格式
下面给出指令前缀各部分的功能简介。
本书主要提供“计算机组成和体系结构”课程的教学内容,包括计算机组成的原理知识,计算机硬件的设计技术,以及简单的实例计算机系统的工程实现,重点强调计算机硬件系统的组成原理、设计技术、工程实现三个方面的内容。作为计算机硬件课程的教材,本书涉及数字电路基础与逻辑设计基础知识、完整的计算机组成原理知识与设计实现技术、计算机系统结构的基础知识和概念等三门课程的有关内容,期望在有限的学时范围内,初步学习到计算机专业关键的三门硬件类课程的基本知识,强调所学知识的系统性和实用程度,强调培养学生的开创意识和实际工作能力。
? 本版的书名增加了“基本原理、设计技术与工程实现”的副标题,特意指出书中提供三类不同性质的教学内容。第一类内容是计算机组成原理与运行机制的核心知识,属于学生一定要掌握的原理性基础知识,在绝大多数同类教材中都会重点讲解;第二类内容是计算机硬件系统的基本设计技术,多数同类教材中讲解不多也欠具体应用实例;第三类内容是计算机硬件系统的入门性工程实现问题,其他教材中较少涉及,在这一版本的教材中对上述三类内容都有适度的讲解。
? 本版增加了计算机系统的工程实现的内容,又对计算机硬件设计技术的内容进行了重点修订,在对有关设计技术进行必要讲解之后,还要进一步给出描述计算各功能部件的组成与功能、使用与控制的ABEL-HDL程序的部分源码,这个程序的结构与实现功能容易读懂,更能方便地实现扩展新的指令和添加新的系统功能。
? 计算机各个功能部件的组成、运行原理和控制使用是课程教学的重点内容,在本版教材中,在强调讲清基本原理和基础概念的基础上,还要提供组成简单、能够实用的功能部件实例,最终还可以使用这些部件实例构建成能够正常运行的教学计算机系统,而这些设计实现的主要工作将交由学生以教学实验的方式来完成,这对培养学生承担实际工作的能力和大有益处,比较充分地体现出作者在主持建设“计算机组成原理”国家精品课程的教学理念。
? 在教材中强调把指令格式选择和指令系统设计、机器语言和汇编语言编程作为重点教学内容之一,为此需要提供使用这套指令系统设计完成的实例计算机系统的监控程序,从而使计算机组成原理课程教学摆脱了硬软件完全分割的局面,有利于加深学生对计算机整机系统的正确理解,这在其他同类教材中是很少见到的。
作者简介
作者:(中国)宋佳兴
宋佳兴,请华大学计算机科学与技术系副研究员,博士。主要研究方向为计算机网络、分布式信息系统等。在相关领域承担多项科研项目,发表论文20余篇,获省部级科技进步奖2项。是清华大学国家精品课“计算机组成原理”课程主要成员,获省部级教学成果奖1项。主讲数据库技术及应用、计算机组成与系统结构课程。
王诚,多年在清华大学计算机系教学和科研第一线工作,出版了十余本书,教学取得优异业绩,科研工作也有十余项重要成果。在长达十七、八年的教学过程中,重点主讲“计算机组成原理”、“计算机组成与体系结构”等课程,计算机组成原理课被评为国家、北京市、清华大学三个级别的精品课程,获北京市高教教学成果一等奖。出版多本主教材和实验指导书,其中有2本被评为北京市精品教材,进入国家 级“十五”和“十一五”规划教材。开发研制了教学硬件实验设备及其软件模拟系统,制作了教学课件,在全国有较大影响。
目录
名誉主任: 陈火旺主任: 李晓明副主任: 钱德沛焦金生委员: (按姓氏笔画排序)
马殿富王志英王晓东宁洪刘辰
孙茂松李大友李仲麟吴朝晖何炎祥
宋方敏张大方张长海周兴社侯文永
袁开榜钱乐秋黄国兴蒋宗礼曾明
廖明宏樊孝忠秘书: 张瑞庆
本书主审: 李晓明
前言FOREWORD对这一版的书名做了一点变动,增加了“基本原理、设计技术与工程实现”的副标题,特意指出书中提供3类不同性质的教学内容。第一类是计算机组成原理与运行机制的核心知识,属于学生一定要掌握的原理性基础知识,在绝大多数的同类教材中都会重点讲解。第二类是计算机硬件系统的基本设计技术,多数同类教材中讲解不多也欠具体应用实例。第三类是计算机硬件系统的入门性工程实现问题,同类教材中较少涉及,我们希望在这一版的教材中对上述3类内容都有适度的讲解,其中的工程实现问题只在主教材中简单提及,主要部分将放到《计算机组成与体系结构实验指导》教材中。这种安排体现了作者多年坚守的教学理念,从如下3个方面予以说明。
(1) 针对计算机组成原理这一类含有较多技术性、工程性、实践性内容的课程,教学安排不宜过分局限于教师课堂讲课、学生课上听讲和课后背书的学习方式,应该在讲课听课的基础上再较大幅度地加强教学实践环节,增强课程内容的实用性,促成学生用课堂学到的理论知识,设计实现一台组成简单完整、原理清晰实用、实验操作方便、支持汇编语言编程的简小计算机系统,促使学生在学习理论知识、掌握设计技术、提升实践能力等诸方面得到全面成长。
(2) 在讲解计算机硬件系统组成和功能实现时,应该把口语性的一般讲解和硬件描述语言的严谨描述恰当地结合起来,鼓励选用硬件描述语言设计计算机控制器和描述整机系统,既能体现计算机的最新设计技术和实现手段,保证教学内容适度的先进性,又可以培养学生严谨的思维方式和对硬件问题的深入理解和准确阐述,这有利于提高授课质量,降低学习和实验的难度。
(3) 在课程的教学安排中,需要处理好硬件子系统(重点部分)和软件子系统(配合部分)的关系,不能完全局限于硬件系统本身,还需要包含必要的软件内容,汇编语言程序设计应该占有一定分量,加深对硬、软件两类资源各自在计算机系统中的地位和作用的理解。指令系统是连接硬、软件系统的纽带,汇编语言编程有助于深入了解指令系统、计算机整机组成与运行控制机制。因此在教学计算机系统中配备了3个基本程序: PC仿真终端程序、交叉汇编程序、监控程序,对多数同学来说做到会使用它们就够了,鼓励有余力的同学探索这几个程序的实现思路和方法。
本书包括了数字电路基础、计算机组成、计算机体系结构3部分内容,共13章。
第1章是全书内容的概述部分,简要介绍计算机组成和体系结构的基本概念,从实现功能的角度介绍计算机硬件系统的5个功能部件;从功能和层次的观点来讲解计算机组成和体系结构各自需要研究和解决的问题,并简要说明了本课程的教学目标和对学习方法的建议。
第2章简明讲解数字电路基础知识和几种常用的电路芯片,是为讲解计算机组成和体系结构做电子线路方面的准备,没有这些知识是很难学懂计算机硬件的组成和运行原理的。
第3章的数据表示和运算、第4章的运算器部件共同构成本书核心内容的第1个知识单元,主要围绕承担数据运算功能的运算器部件进行讲解,在给出通用的基本原理知识的同时,还提供了设计实现一个原理性的8位运算器模型和一个4位位片结构的运算器芯片两个实例,展现运算器部件的设计过程和实现方法,提升学生的实践能力。
前言计算机组成与体系结构(第3版)第5章的指令系统和第6章的控制器部件共同构成本书核心内容的第2个知识单元,主要围绕指令格式选择、指令系统设计,以及硬件系统中的硬布线方案的控制器部件进行讲解,而对微程序方案控制器只作适当介绍。在给出通用的基本原理知识的同时,提供了一套简单实用的基本指令系统。硬件方面,选用多指令周期方案实现这套指令系统的控制器部件的具体例子,展现控制器部件的设计过程和实现方法,提升学生的实践能力。软件方面,使用这套指令系统设计了教学机的监控程序,可以支持汇编语言程序设计;若再扩展一部分指令,也可以支持解释执行的BASIC高级语言程序设计,能支持浮点数运算和多种基本数学函数运算。针对这门课程的教学要求来说,此时的教学机的硬软件系统已经比较完整,包括了计算机硬件软件系统全部6个层次的基本内容。
第7章的主存、第8章的高速缓存和虚存、第9章的辅助存储器设备共同构成本书核心内容的第3个知识单元,主要围绕计算机3级结构的存储器件系统和外存储器设备进行讲解,还给出了通过字、位扩展技术,用静态芯片构建内存储器部件的具体例子,支持存储器与CPU同步运行,展现内存储器的功能和经总线连接CPU的具体方法。
第10章的输入输出设备和第11章的输入输出系统共同构成本书核心内容的第4个知识单元,主要围绕承担计算机的输入输出功能的设备或者部件进行讲解,给出了用于连接计算机各个部件的单总线结构的实际例子,具体介绍了串行接口的内部线路组成和使用方法,并通过串口连接PC仿真终端,选用程序查询方式控制入出设备,使教学机整机系统具备了输入输出操作功能。
第12章的流水线技术和第13章的并行计算机体系结构共同构成本书核心内容的第5个知识单元,对应计算机体系结构课程的基础知识,针对提高计算机系统的性能,更多地强调基本概念、提出问题的思路和解决问题的方案,基本上止步于定性说明。
教学过程中,可以根据不同的课程安排和教学要求,合理分配教材中3部分内容的课时比例。针对把计算机组成和系统结构合并成一门课程的安排,教材第3~13章的内容都属于必学知识,建议教学学时安排为70~90。若只是用于计算机组成原理课程,计算机体系结构的内容另外开课,则只需讲解第3~11章中的知识,建议课内学时安排为60~70,另外安排约16个实验学时。
第2章用于复习先修课程的内容,简明介绍数字电路与逻辑设计知识,约占教材总篇幅的7%,是学习计算机组成和体系结构一定会用到的电路基础知识,也许要求并不太多也不深,但如果完全不了解这些内容,要听懂课堂授课内容难度很大,设计实现一个小计算机系统更无从谈起。
第1章、第3~11章是课程的主体部分,约占教材总篇幅的73%,主要是计算机组成方面较为完整的系统知识,重点围绕基本计算机硬件系统5个功能部件的功能和组成进行分析讲解。
第12章和第13章是本课程的提高部分,约占教材总篇幅的20%,主要是计算机体系结构方面的基础知识,重点介绍提高计算机系统性能的各种可行思路与基本途径。
在教学环节安排中,需要处理好理论教学和教学实验的关系,可以考虑(并非一定如此)用约四分之三的课内学时(例如48学时)讲授计算机组成与运行机制的核心知识,四分之一的课内学时中的一小部分(例如6学时)用于讲解构建整机系统用到的设计技术和工程实现问题。剩余的部分(例如10学时)和16个实验学时统一安排用于教学实验,在教师的指导下去完成设计实现小计算机硬件系统的核心工作,更好地贯彻理论指导实践,通过实践再进一步深入理解理论的认知过程,做到学习知识和增长能力的双丰收。
本教材配套的有: ①内容详尽的教学实验指导教材; ②教学实验设备(由清华大学科教仪器厂生产销售,型号是TECXPⅡ),选用教材第1~4个知识单元的部件实例组合而成,能够确保课堂授课内容和教学实验项目完美的结合; ③PowerPoint教学课件; ④指令级软件模拟系统,可以直接在PC系统中运行,实现了与硬件设备相同的运行功能。良好的教学实践环境和实验条件,可以有效地加深对课堂教学内容的理解,并使得学生在一定程度上获得开展研究工作和开展计算机硬件系统设计的实际经验,全面提高解决实际问题和创新思维的能力。
本书的第1~3章、第7~13章由宋佳兴修订,第4~6章由王诚修订,作者有多年从事本专业教学和科研工作的经历。
由于时间和作者水平所限,加上时间仓促,书中难免存在不足之处,敬请读者批评指正。
编者2016年6月于清华大学计算机科学与技术系这是第二版前言,不知要否,如果要,就可以用下面的前言FOREWORD作为“21世纪大学本科计算机专业系列教材”,遵照本系列教材评审组专家的意见,本书包括了数字电路基础、计算机组成、计算机体系结构3个部分内容。本书读者对象主要是学习计算机课程的大学生,包括计算机系的学生、软件学院的学生和非计算机专业选修计算机课程的学生。可以根据不同的课程和教学要求,合理分配本教材中3部分内容的课时比例。全书共13章,其中第2章属于先修内容,约占教材总量的7%,若是学生课前未曾学习过数字电路与逻辑设计课程,还是应该用少量学时对教材第2章的内容进行适当讲解;第3~11章是课程的主体部分,约占教材总量的73%,主要是计算机组成方面的知识,重点围绕基本计算机硬件系统5个功能部件的功能和组成进行讲解分析;第12~13章是本课程的提高部分,约占教材总量的20%,主要是计算机体系结构方面的基础知识,重点介绍提高计算机系统性能的各种可行思路与基本途径。其中的指令流水线的浅显内容已经出现在计算机组成原理课程之中,但多数人还是愿意把较为具体深入的指令流水技术安排到计算机系统结构课程中讲授。
针对把计算机组成和系统结构合并成一门课程的情形,教材第3~13章的内容都属于必学知识,建议教学学时安排为70~90学时。若只是用于计算机组成原理课程,计算机体系结构的内容另外开课,则只需讲解第3~11章中的知识,建议教学学时安排为60~70学时。教材主体部分的内容是按照基本通用原理、简明原理示例、典型产品现状这样3个层次来处理的。
基本通用原理是基础,是学习与理解计算机组成与运行机制的核心知识。其特点是稳定性(不随时间变迁而改变)和通用性(不随具体机型而变化),是学生一定要掌握的部分。要把通用原理转化成真实的计算机系统,还有许多技术与工程、性能价格比的平衡关系等需要解决。
在简明原理示例这个层次,强调运用学习到的基本原理知识,学懂或者设计实现一台硬软件基本完整、实现简单(易懂、价廉)、但不一定是最理想(不追求更完备的性能、更好的实用价值)的计算机系统的技术与过程,增加对所学知识的理解深度和应用能力,力求把学习知识和增长实践能力结合起来。
在典型产品现状这个层次,将选择某些典型计算机系统中的实例,给出其设计实现的结果及其外特性,可以体现用到的基本原理,更强调让学生了解计算机当前的技术水平和发展现状。对三个层次的教学要求不尽相同,对优化学生的知识结构各自发挥不同的作用。
在讲解计算机组成和功能时,把通常的文字叙述和语言VHDL描述结合起来,体现计算机的最新设计手段和实现技术,保证教学内容的先进性,并尽量在提高授课质量,降低实验、学习的难度方面做出新的探索。
教材内容具体安排如下。
第1章是全书内容的概述部分,简要介绍计算机组成和体系结构的基本概念,从实现功能的角度来讲解计算机硬件系统的基本组成;从功能和层次的观点来讲解计算机组成和体系结构各自需要研究和解决的问题,并简要说明了本课程的教学目标和对学习方法的建议。
第2章简明讲解数字电路基础知识和几种常用的电路芯片,是为讲解计算机组成和体系结构作电子线路方面的准备,没有这些知识是很难学懂计算机硬件的组成和运行原理的。
第3章的数据表示和运算和第4章的运算器部件共同构成本书核心内容的第1个知识单元。主要围绕计算机硬件系统中承担数据运算功能的部件进行讲解,在给出通用的基本原理知识的同时,还给出运算器部件的具体例子,展示运算器部件的设计过程和实现方法,提升学生的实践能力。
前言计算机组成与体系结构(第3版)第5章的指令系统和第6章的控制器部件共同构成本书核心内容的第2个知识单元。主要围绕计算机硬件系统中承担指挥控制功能的硬连线方案的控制器部件进行讲解,而对微程序控制器只作适当介绍。在给出通用的基本原理知识的同时,还给出控制器部件的具体例子,展示控制器部件的设计过程和实现方法,提升学生的实践能力。
第7章的主存、第8章的高速缓存和虚存以及第9章的辅助存储器设备共同构成本书核心内容的第3个知识单元。主要围绕计算机3级结构的存储器件系统和外存储器设备进行讲解,还给出了通过字、位扩展技术,用存储器芯片构建内存储器的具体例子。
第10章的输入输出设备和第11章的输入输出系统共同构成本书核心内容的第4个知识单元。主要围绕承担计算机的输入输出功能的设备或者部件进行讲解,给出了用于连接计算机各个部件的总线构成的实际例子,具体介绍了串行接口的内部线路的组成和使用方法。
第12章的流水线技术和第13章的并行计算机体系结构共同构成本书核心内容的第5个知识单元。对应计算机体系结构课程的主要知识,针对提高计算机系统的性能,更多地强调基本概念、提出问题的思路和解决问题的方案,基本上止步于定性说明。
通过本教材,学生可以学到数字电路的基础知识,了解某些电路芯片的功能和用法,初步认识到某些逻辑功能是能够使用数字电路实现的;可以从层次的观点,掌握必要的基础知识,计算机组成和运行机制方面的知识,以及必要的专业知识基础,为下一步的学习和进一步提高实际工作能力做好准备;可以从系统的观点,了解计算机体系结构领域的基本知识,理解提高计算机的部件和整机硬件性能的各种可行途径,理解计算机系统中硬件、软件的功能划分和相互配合关系,能站在更高的层次上思考与解决学习、工作中遇到的问题。
为方便教学,本教材配有PowerPoint电子教案。除此之外,还有硬件实现的教学计算机设备,这个设备就是选用本教材第1~4个知识单元的实际例子组合而成的,确保课堂授课内容和教学实验项目能够完美结合。还有内容详尽的教学实验指导书和通过软件模拟实现的相同功能的模拟系统。良好的教学实践环境和实验条件,能够有效地加深对课堂教学内容的理解,并使得学生在一定程度上获得开展研究工作和计算机硬件系统设计的实际经验,全面提高解决实际问题和创新思维的能力。
本书的第1~6章由王诚教授修订,第7~13章由宋佳兴副教授修订,作者有多年从事本专业教学和科研工作的经历。
由于时间和作者水平所限,书中难免存在不足之处,敬请广大读者批评指正。
作者2011年4月于清华大学计算机科学与技术系
序言
名誉主任: 陈火旺主任: 李晓明副主任: 钱德沛焦金生委员: (按姓氏笔画排序)
马殿富王志英王晓东宁洪刘辰
孙茂松李大友李仲麟吴朝晖何炎祥
宋方敏张大方张长海周兴社侯文永
袁开榜钱乐秋黄国兴蒋宗礼曾明
廖明宏樊孝忠秘书: 张瑞庆
本书主审: 李晓明
前言FOREWORD对这一版的书名做了一点变动,增加了“基本原理、设计技术与工程实现”的副标题,特意指出书中提供3类不同性质的教学内容。第一类是计算机组成原理与运行机制的核心知识,属于学生一定要掌握的原理性基础知识,在绝大多数的同类教材中都会重点讲解。第二类是计算机硬件系统的基本设计技术,多数同类教材中讲解不多也欠具体应用实例。第三类是计算机硬件系统的入门性工程实现问题,同类教材中较少涉及,我们希望在这一版的教材中对上述3类内容都有适度的讲解,其中的工程实现问题只在主教材中简单提及,主要部分将放到《计算机组成与体系结构实验指导》教材中。这种安排体现了作者多年坚守的教学理念,从如下3个方面予以说明。
(1) 针对计算机组成原理这一类含有较多技术性、工程性、实践性内容的课程,教学安排不宜过分局限于教师课堂讲课、学生课上听讲和课后背书的学习方式,应该在讲课听课的基础上再较大幅度地加强教学实践环节,增强课程内容的实用性,促成学生用课堂学到的理论知识,设计实现一台组成简单完整、原理清晰实用、实验操作方便、支持汇编语言编程的简小计算机系统,促使学生在学习理论知识、掌握设计技术、提升实践能力等诸方面得到全面成长。
(2) 在讲解计算机硬件系统组成和功能实现时,应该把口语性的一般讲解和硬件描述语言的严谨描述恰当地结合起来,鼓励选用硬件描述语言设计计算机控制器和描述整机系统,既能体现计算机的最新设计技术和实现手段,保证教学内容适度的先进性,又可以培养学生严谨的思维方式和对硬件问题的深入理解和准确阐述,这有利于提高授课质量,降低学习和实验的难度。
(3) 在课程的教学安排中,需要处理好硬件子系统(重点部分)和软件子系统(配合部分)的关系,不能完全局限于硬件系统本身,还需要包含必要的软件内容,汇编语言程序设计应该占有一定分量,加深对硬、软件两类资源各自在计算机系统中的地位和作用的理解。指令系统是连接硬、软件系统的纽带,汇编语言编程有助于深入了解指令系统、计算机整机组成与运行控制机制。因此在教学计算机系统中配备了3个基本程序: PC仿真终端程序、交叉汇编程序、监控程序,对多数同学来说做到会使用它们就够了,鼓励有余力的同学探索这几个程序的实现思路和方法。
本书包括了数字电路基础、计算机组成、计算机体系结构3部分内容,共13章。
第1章是全书内容的概述部分,简要介绍计算机组成和体系结构的基本概念,从实现功能的角度介绍计算机硬件系统的5个功能部件;从功能和层次的观点来讲解计算机组成和体系结构各自需要研究和解决的问题,并简要说明了本课程的教学目标和对学习方法的建议。
第2章简明讲解数字电路基础知识和几种常用的电路芯片,是为讲解计算机组成和体系结构做电子线路方面的准备,没有这些知识是很难学懂计算机硬件的组成和运行原理的。
第3章的数据表示和运算、第4章的运算器部件共同构成本书核心内容的第1个知识单元,主要围绕承担数据运算功能的运算器部件进行讲解,在给出通用的基本原理知识的同时,还提供了设计实现一个原理性的8位运算器模型和一个4位位片结构的运算器芯片两个实例,展现运算器部件的设计过程和实现方法,提升学生的实践能力。
前言计算机组成与体系结构(第3版)第5章的指令系统和第6章的控制器部件共同构成本书核心内容的第2个知识单元,主要围绕指令格式选择、指令系统设计,以及硬件系统中的硬布线方案的控制器部件进行讲解,而对微程序方案控制器只作适当介绍。在给出通用的基本原理知识的同时,提供了一套简单实用的基本指令系统。硬件方面,选用多指令周期方案实现这套指令系统的控制器部件的具体例子,展现控制器部件的设计过程和实现方法,提升学生的实践能力。软件方面,使用这套指令系统设计了教学机的监控程序,可以支持汇编语言程序设计;若再扩展一部分指令,也可以支持解释执行的BASIC高级语言程序设计,能支持浮点数运算和多种基本数学函数运算。针对这门课程的教学要求来说,此时的教学机的硬软件系统已经比较完整,包括了计算机硬件软件系统全部6个层次的基本内容。
第7章的主存、第8章的高速缓存和虚存、第9章的辅助存储器设备共同构成本书核心内容的第3个知识单元,主要围绕计算机3级结构的存储器件系统和外存储器设备进行讲解,还给出了通过字、位扩展技术,用静态芯片构建内存储器部件的具体例子,支持存储器与CPU同步运行,展现内存储器的功能和经总线连接CPU的具体方法。
第10章的输入输出设备和第11章的输入输出系统共同构成本书核心内容的第4个知识单元,主要围绕承担计算机的输入输出功能的设备或者部件进行讲解,给出了用于连接计算机各个部件的单总线结构的实际例子,具体介绍了串行接口的内部线路组成和使用方法,并通过串口连接PC仿真终端,选用程序查询方式控制入出设备,使教学机整机系统具备了输入输出操作功能。
第12章的流水线技术和第13章的并行计算机体系结构共同构成本书核心内容的第5个知识单元,对应计算机体系结构课程的基础知识,针对提高计算机系统的性能,更多地强调基本概念、提出问题的思路和解决问题的方案,基本上止步于定性说明。
教学过程中,可以根据不同的课程安排和教学要求,合理分配教材中3部分内容的课时比例。针对把计算机组成和系统结构合并成一门课程的安排,教材第3~13章的内容都属于必学知识,建议教学学时安排为70~90。若只是用于计算机组成原理课程,计算机体系结构的内容另外开课,则只需讲解第3~11章中的知识,建议课内学时安排为60~70,另外安排约16个实验学时。
第2章用于复习先修课程的内容,简明介绍数字电路与逻辑设计知识,约占教材总篇幅的7%,是学习计算机组成和体系结构一定会用到的电路基础知识,也许要求并不太多也不深,但如果完全不了解这些内容,要听懂课堂授课内容难度很大,设计实现一个小计算机系统更无从谈起。
第1章、第3~11章是课程的主体部分,约占教材总篇幅的73%,主要是计算机组成方面较为完整的系统知识,重点围绕基本计算机硬件系统5个功能部件的功能和组成进行分析讲解。
第12章和第13章是本课程的提高部分,约占教材总篇幅的20%,主要是计算机体系结构方面的基础知识,重点介绍提高计算机系统性能的各种可行思路与基本途径。
在教学环节安排中,需要处理好理论教学和教学实验的关系,可以考虑(并非一定如此)用约四分之三的课内学时(例如48学时)讲授计算机组成与运行机制的核心知识,四分之一的课内学时中的一小部分(例如6学时)用于讲解构建整机系统用到的设计技术和工程实现问题。剩余的部分(例如10学时)和16个实验学时统一安排用于教学实验,在教师的指导下去完成设计实现小计算机硬件系统的核心工作,更好地贯彻理论指导实践,通过实践再进一步深入理解理论的认知过程,做到学习知识和增长能力的双丰收。
本教材配套的有: ①内容详尽的教学实验指导教材; ②教学实验设备(由清华大学科教仪器厂生产销售,型号是TECXPⅡ),选用教材第1~4个知识单元的部件实例组合而成,能够确保课堂授课内容和教学实验项目完美的结合; ③PowerPoint教学课件; ④指令级软件模拟系统,可以直接在PC系统中运行,实现了与硬件设备相同的运行功能。良好的教学实践环境和实验条件,可以有效地加深对课堂教学内容的理解,并使得学生在一定程度上获得开展研究工作和开展计算机硬件系统设计的实际经验,全面提高解决实际问题和创新思维的能力。
本书的第1~3章、第7~13章由宋佳兴修订,第4~6章由王诚修订,作者有多年从事本专业教学和科研工作的经历。
由于时间和作者水平所限,加上时间仓促,书中难免存在不足之处,敬请读者批评指正。
编者2016年6月于清华大学计算机科学与技术系这是第二版前言,不知要否,如果要,就可以用下面的前言FOREWORD作为“21世纪大学本科计算机专业系列教材”,遵照本系列教材评审组专家的意见,本书包括了数字电路基础、计算机组成、计算机体系结构3个部分内容。本书读者对象主要是学习计算机课程的大学生,包括计算机系的学生、软件学院的学生和非计算机专业选修计算机课程的学生。可以根据不同的课程和教学要求,合理分配本教材中3部分内容的课时比例。全书共13章,其中第2章属于先修内容,约占教材总量的7%,若是学生课前未曾学习过数字电路与逻辑设计课程,还是应该用少量学时对教材第2章的内容进行适当讲解;第3~11章是课程的主体部分,约占教材总量的73%,主要是计算机组成方面的知识,重点围绕基本计算机硬件系统5个功能部件的功能和组成进行讲解分析;第12~13章是本课程的提高部分,约占教材总量的20%,主要是计算机体系结构方面的基础知识,重点介绍提高计算机系统性能的各种可行思路与基本途径。其中的指令流水线的浅显内容已经出现在计算机组成原理课程之中,但多数人还是愿意把较为具体深入的指令流水技术安排到计算机系统结构课程中讲授。
针对把计算机组成和系统结构合并成一门课程的情形,教材第3~13章的内容都属于必学知识,建议教学学时安排为70~90学时。若只是用于计算机组成原理课程,计算机体系结构的内容另外开课,则只需讲解第3~11章中的知识,建议教学学时安排为60~70学时。教材主体部分的内容是按照基本通用原理、简明原理示例、典型产品现状这样3个层次来处理的。
基本通用原理是基础,是学习与理解计算机组成与运行机制的核心知识。其特点是稳定性(不随时间变迁而改变)和通用性(不随具体机型而变化),是学生一定要掌握的部分。要把通用原理转化成真实的计算机系统,还有许多技术与工程、性能价格比的平衡关系等需要解决。
在简明原理示例这个层次,强调运用学习到的基本原理知识,学懂或者设计实现一台硬软件基本完整、实现简单(易懂、价廉)、但不一定是最理想(不追求更完备的性能、更好的实用价值)的计算机系统的技术与过程,增加对所学知识的理解深度和应用能力,力求把学习知识和增长实践能力结合起来。
在典型产品现状这个层次,将选择某些典型计算机系统中的实例,给出其设计实现的结果及其外特性,可以体现用到的基本原理,更强调让学生了解计算机当前的技术水平和发展现状。对三个层次的教学要求不尽相同,对优化学生的知识结构各自发挥不同的作用。
在讲解计算机组成和功能时,把通常的文字叙述和语言VHDL描述结合起来,体现计算机的最新设计手段和实现技术,保证教学内容的先进性,并尽量在提高授课质量,降低实验、学习的难度方面做出新的探索。
教材内容具体安排如下。
第1章是全书内容的概述部分,简要介绍计算机组成和体系结构的基本概念,从实现功能的角度来讲解计算机硬件系统的基本组成;从功能和层次的观点来讲解计算机组成和体系结构各自需要研究和解决的问题,并简要说明了本课程的教学目标和对学习方法的建议。
第2章简明讲解数字电路基础知识和几种常用的电路芯片,是为讲解计算机组成和体系结构作电子线路方面的准备,没有这些知识是很难学懂计算机硬件的组成和运行原理的。
第3章的数据表示和运算和第4章的运算器部件共同构成本书核心内容的第1个知识单元。主要围绕计算机硬件系统中承担数据运算功能的部件进行讲解,在给出通用的基本原理知识的同时,还给出运算器部件的具体例子,展示运算器部件的设计过程和实现方法,提升学生的实践能力。
前言计算机组成与体系结构(第3版)第5章的指令系统和第6章的控制器部件共同构成本书核心内容的第2个知识单元。主要围绕计算机硬件系统中承担指挥控制功能的硬连线方案的控制器部件进行讲解,而对微程序控制器只作适当介绍。在给出通用的基本原理知识的同时,还给出控制器部件的具体例子,展示控制器部件的设计过程和实现方法,提升学生的实践能力。
第7章的主存、第8章的高速缓存和虚存以及第9章的辅助存储器设备共同构成本书核心内容的第3个知识单元。主要围绕计算机3级结构的存储器件系统和外存储器设备进行讲解,还给出了通过字、位扩展技术,用存储器芯片构建内存储器的具体例子。
第10章的输入输出设备和第11章的输入输出系统共同构成本书核心内容的第4个知识单元。主要围绕承担计算机的输入输出功能的设备或者部件进行讲解,给出了用于连接计算机各个部件的总线构成的实际例子,具体介绍了串行接口的内部线路的组成和使用方法。
第12章的流水线技术和第13章的并行计算机体系结构共同构成本书核心内容的第5个知识单元。对应计算机体系结构课程的主要知识,针对提高计算机系统的性能,更多地强调基本概念、提出问题的思路和解决问题的方案,基本上止步于定性说明。
通过本教材,学生可以学到数字电路的基础知识,了解某些电路芯片的功能和用法,初步认识到某些逻辑功能是能够使用数字电路实现的;可以从层次的观点,掌握必要的基础知识,计算机组成和运行机制方面的知识,以及必要的专业知识基础,为下一步的学习和进一步提高实际工作能力做好准备;可以从系统的观点,了解计算机体系结构领域的基本知识,理解提高计算机的部件和整机硬件性能的各种可行途径,理解计算机系统中硬件、软件的功能划分和相互配合关系,能站在更高的层次上思考与解决学习、工作中遇到的问题。
为方便教学,本教材配有PowerPoint电子教案。除此之外,还有硬件实现的教学计算机设备,这个设备就是选用本教材第1~4个知识单元的实际例子组合而成的,确保课堂授课内容和教学实验项目能够完美结合。还有内容详尽的教学实验指导书和通过软件模拟实现的相同功能的模拟系统。良好的教学实践环境和实验条件,能够有效地加深对课堂教学内容的理解,并使得学生在一定程度上获得开展研究工作和计算机硬件系统设计的实际经验,全面提高解决实际问题和创新思维的能力。
本书的第1~6章由王诚教授修订,第7~13章由宋佳兴副教授修订,作者有多年从事本专业教学和科研工作的经历。
由于时间和作者水平所限,书中难免存在不足之处,敬请广大读者批评指正。
作者2011年4月于清华大学计算机科学与技术系
文摘
第5章指令系统和汇编语言程序设计指令是指示计算机执行某项运算或操作功能的命令。一台计算机使用的全部指令组成这台计算机的指令系统。指令系统处于硬件和软件的交界面上,它被划分为精简指令系统(RISC)和复杂指令系统(CISC)两大类。从用户的角度看,指令用于编写程序,是用户使用与控制计算机运行的最小功能单位;从计算机的组成和功能来看,计算机硬件系统是用于实现每条指令功能的实际设备,因此硬件系统只能直接识别和运行由机器指令构成的程序,指令系统直接与计算机的运行性能和硬件结构密切相关,是设计一台计算机的起始点和基本依据。
本章重点讲授计算机的指令、指令系统和汇编语言程序设计这3项内容。
5.1指令格式和指令系统概述[*2]5.1.1指令的定义和指令格式计算机系统由硬件和软件两个子系统组成。硬件是指构成计算机的中央处理机、主存储器、输入输出设备等物理装置。软件则指由软件厂家为方便用户使用计算机而提供的系统软件和用户用于完成自己的特定事务和信息处理任务而设计的用户软件。计算机硬件能直接识别和运行的软件程序通常由该计算机的指令代码序列组成。
1. 指令的定义
用于组成计算机程序、指示计算机硬件执行某项运算或操作功能的命令叫作指令,在计算机内部它是用一定长度的二进制位串来表示的。一台计算机支持(或称使用)的全部指令构成该机的指令系统。指令系统对计算机用户和计算机厂家都有着非常重要的影响。指令是设计计算机程序的最小功能单位,计算机厂家需要在计算机硬件系统中实现每一条指令的功能,用指令设计各种系统软件,指令系统直接与计算机系统的运行性能、硬件结构的复杂程度等密切相关,它是设计一台计算机的起始点和基本依据。
早期的计算机,从简化计算机硬件结构、降低成本考虑,指令系统都比较简单,指令条数少、运算功能弱,能处理的数据只是定点小数,使用相当困难。到了20世纪六七十年代,随着集成电路和超大规模集成电路的出现与发展,计算机硬件成本直线下降,相应的软件成本所占比例迅速增加,计算机的指令系统日渐变得更加复杂和完备,指令条数多达300~500条,寻址方式也多达十几种,能直接处理的数据类型更多,构成了复杂指令系统的计算机。……在CISC计算机中,有80%的功能更强、实现起来更为复杂的指令却较少被使用,在程序运行的过程中只占到20%的时间,有80%的程序运行时间使用的是另外20%的功能简单、实现容易的指令。据此提出了简化指令系统的计算机的概念并予以实现,只选用几种简单的寻址方式和最常用的几十条指令,充分考虑了超大规模集成电路设计、制造中的有关问题,吸收当前软件研究的各项成果,从硬、软件结合的角度解决了许多矛盾,设计制造出运行性能更高的RISC计算机系统。它虽然有明显的优势,但不能完全取代CISC计算机系统,考虑到此前已有的大量软件资源是应用CISC结构的指令系统实现的,CISC计算机仍有其存在的理由。
指令系统和汇编语言程序设计第 5 章计算机组成与体系结构(第3版)要确定一台计算机的指令系统并评价其优劣,通常应从如下4个方面考虑。
(1) 指令系统的完备性,常用指令齐全,编程方便。
(2) 指令系统的高效性,程序占内存空间少,运行速度快。
(3) 指令系统的规整性,指令和数据使用规则统一简单,易学易记。
(4) 指令系统的兼容性,同一系列的低档计算机的程序能在新的高档机上直接运行。
要完全同时满足上述标准是困难的,但它可以指导我们设计出更加合理的指令系统。设计指令系统的核心问题是选定指令的功能和格式。指令的格式与计算机的字长、期望的存储器容量和读写方式、支持的数据类型、计算机硬件结构的复杂程度和追求的运算性能等有关,这些内容中的某些部分超出了我们的教学内容范围,请有兴趣者参阅其他资料。
2. 指令格式
通常情况下,一条指令要由如图5.1所示的两部分内容组成。
图5.1一条指令的组成第一部分是指令的操作码。操作码用于指明本条指令的运算和操作功能,例如,是算术加运算、减运算还是逻辑与运算、或运算功能,是否是读、写内存或读、写外设操作功能,是否是程序转移和子程序调用或返回操作功能等。计算机需要为每条指令分配一个确定的操作码。
第二部分是指令的操作数地址。用于给出被操作的信息(指令或数据)的地址,包括参加运算的一个或多个操作数所在的地址,运算结果的保存地址,程序的转移地址,被调用的子程序的入口地址等。
在一条指令中,如何安排指令字的长度,即使用多少个二进制位(bit)表示一条指令,又如何分配指令字中这两部分所占用的位数(长度),如何安排操作数的个数,如何表示和使用一个操作数的地址(寻址方式),是要认真对待、精心设计的重要问题。寻址方式将单独放在5.2 节讲解,其余内容在本节的下面部分分别介绍。
5.1.2操作码的组织与编码
计算机的字长是由选用的数据的类型及其表示所用的二进制位数决定的,通常是2、4、8个字节。指令字的长度,多数情况下就确定为计算机的字长,即一条指令占用计算机的一个内存字,但并不强制要求所有指令的字长都相同,以便提高计算机资源利用率。例如,在一个内存字中,可以考虑存放几条很短的指令;长的指令也可能占用多个内存字,例如在字长较短的计算机系统中,某些指令需要选用双字指令格式,保存这样的一条指令就要使用两个内存字。
从对指令操作码的组织与编码所选用的方案分类,可以区分出如下2种处理情况。这里只是简单介绍一些基本概念,更详细的内容到5.3节会清楚地看到。
……
(2) 变长的操作码的组织方案。当计算机的字长与指令长度为16位或8位时,单独为操作码划分出固定的多位后,留给用于表示操作数地址的位数就会严重不足。为此不得不对一个指令字的每一个二进制位的使用精打细算,使一些位(bit)在不同的指令中有不同的作用。例如,在一些指令中,这些位用作操作码;而在另外一些指令中,这些位又被用作操作数的地址。则不同指令的操作码长度就会不同,即尽量为那些最常用(程序中使用频率高)、用于表示操作数地址的位数要求又较多的指令,适当少分配几位操作码(当然能表示的指令条数也就少);而对那些表示操作数地址的位数要求较少的指令多分配几位操作码;对那些无操作数的指令,整个指令字的全部位都用作操作码,力争在比较短的一个指令字中,既能表示出比较多的指令条数,又能尽量满足给出相应的操作数地址的要求,如PDP11计算机就选用这种方案。我们设计实现的用于硬件课程教学的8位字长的计算机就选用变长的操作码。
5.1.3有关操作数的类型、个数、来源、去向和地址安排
在计算机指令中,可以直接使用的基本数据类型通常包括逻辑类型(bit),字符和字符串类型、整数类型(integer)、浮点数类型(floating)等,需要结合指令的操作码来判断数据类型并完成相应的运算处理。使用这几个基本的数据类型还能构造出高级语言中的更为复杂的复合数据类型,这些复合数据类型不能出现在基本的机器指令中。
不同的指令使用不同数目、不同来源去向、不同用法的操作数,必须把它们统一起来,并安排在指令字的数据地址字段。
从用到的操作数个数区分,可能有如下4种情况。
(1) 无操作数指令。有的指令不涉及操作数,或使用约定的某个(些)操作数,既已约定则没有必要再在指令中加以表示,称这类指令为无操作数指令。它仅有操作码部分,例如停机指令、空操作指令、关中断指令、堆栈结构的计算机系统中对堆栈中数据运算的指令等。
……
(3) 双操作数指令。对于常用的算术和逻辑运算指令,往往要求使用两个操作数,这两个操作数往往保存在两个寄存器中,需分别给出目的寄存器和源寄存器的编号,其中目的寄存器还用于保存本次的运算结果。在寄存器与主存储器之间完成数据传送的指令,也需要给出寄存器编号和主存储器地址。称这类指令为双操作数指令。
(4) 多操作数指令。另外一些指令可能使用多个操作数,如3个操作数,其中两个操作数地址分别给出两个源操作数的地址,第三个操作数地址是用于给出保存本次运算结果的目的操作数地址,可以称这类指令为三操作数指令;在有些性能更高的计算机(甚至PC机)中,还有在指令中使用更多个操作数地址的指令,用于完成对一批数据的处理过程,如字符串复制指令,向量、矩阵运算指令等,称这类指令为多操作数指令。
上述4种情况中的前3种,由于其具有指令字长可以相对较短、执行速度较高、计算机硬件结构可以相对简单等优点,在各种不同类型的计算机中被广泛应用;相对而言,最后一种更多地用在字长较长的大中型计算机中。
请注意,指令的操作数地址字段有时也用于给出指令的地址,例如,转移指令的转移目标地址、子程序的入口地址等。
在设计实现实际的指令系统时,还有一些问题需要处理,暂不赘述。
从操作数的来源、去向及其在指令字中的地址安排考虑,有多种情况。
这里说的操作数的来源、去向,是指表示在指令中操作数要从哪里读来、写向哪里去。
下面讨论操作数的来源、去处和地址安排。
可以把指令中的操作数的来源、去向归纳为如下4种主要情况。
(1) 操作数的第一个来源、去向,可以是CPU 内部的通用寄存器,此时应在指令字中给出用到的寄存器编号(寄存器名)。通用寄存器的数量一般为几个、十几个,一二百个,故在指令字中须为其分配2、3、4、5或更多一点的位数来指明一个寄存器。该寄存器中的内容,可以是指令运算用到的数据,也可能用作一个操作数或者指令的地址,或计算主存储器地址的相关信息。
(2) 操作数第二个来源、去向,是外围设备(接口)中的一个寄存器。通常用设备编号、或设备入出端口地址、或设备映像地址(与内存储器地址统一编址的一个设备地址编号)来表示。设备编号或设备入出端口地址用的位数不会太多,通常可以在第一个指令字中直接给出。设备映像地址与一个内存单元地址的处理办法类同,到5.2节具体说明。
(3) 操作数的第三个来源、去向,是内存储器的一个存储单元,此时应在指令字中给出该存储单元的地址。由于许多计算机用到的内存地址的位数就是一个机器字的长度,要在一个指令字中既给出操作码、有关寄存器编号等信息,又直接给出这一内存地址是困难的,再加上还有采用多种不同方式读写内存的需求,这就需要找到解决这些问题的完整方案。将单独在5.2节来详细说明具体解决方案。
(4) 操作数的第四个来源是指令字中的某个字段的内容。它可能就是一个运算要用到的数据,或适当处理后形成用于数据运算、存储器地址计算的一个数据。
5.1.4指令的分类
一台计算机的指令系统往往由几十条到几百条指令组成。可以从不同的角度对这些指令进行分类。如前一节讲的就是按指令中使用的操作数个数来分类的,但更常用的还是按指令所完成的功能进行分类,由于不同人对指令功能划分的标准并不完全相同,其分类结果也就会有所差异,我们给出如下分类的例子。
(1) 算术与逻辑运算类指令是每台计算机都必须具有的指令,它通常完成对一或两个数据的算术运算或逻辑运算功能。不同档次、不同性能的计算机所能加工、运算的数据类型(整数、浮点数、十进制数等)和支持的运算功能(加、减、乘、除、变符号等)的完备程度可以有所差异,但一般都必须给出算术与逻辑运算的结果,以及结果的有关特征。
……
(3) 数据传送类指令用于实现通用寄存器之间、通用寄存器与内存储器存储单元之间(通常也可以单独称其为存储器读写指令)、内存储器不同的存储单元之间、通用寄存器与外围设备(接口)之间(有些场合也可以单独划分为输入/输出指令)的数据传送功能。从内存储器和外围设备(接口)操作性质的不同,又可以区分为读和写操作两种,它指明数据传送的方向,数据从内存或外围设备传送到CPU,或者数据从CPU传送到内存或外围设备。
(4) 转移类指令用于解决变动程序中指令执行次序(程序执行流程)的需求。转移指令是一种改变程序中指令执行次序的指令。程序中的指令,大部分是按指令排列的自然次序顺序执行,但有时候又要求不执行邻接的下一条指令,而是转移到另一段程序入口处开始执行,此时就会用到一条转移指令。转移指令又被区分为无条件转移和条件转移两类。二者的相同之处是都必须在指令中给出转移地址。不同之处是,条件转移指令还必须在指令中给出判断是否执行转移所依据的条件,仅在条件为真时才执行转移,否则顺序执行;而无条件转移指令一定执行转移。
(5) 子程序调用指令与返回指令可以被理解为一种特定的转移指令。二者要配合使用,通过子程序调用指令,使一段被称为子程序的特定程序段投入运行,而该程序段的最后一条指令,一定是一条子程序返回指令,它会在子程序运行结束后,确保转移回到主程序中排在子程序调用指令之后的那条指令处接着执行。而一般的转移指令,并不涉及再返回来的问题。再深入一步讲,子程序又可以被分为用户自己编写的子程序和软件系统提供的子程序两大类,这后一部分又被称为访问系统程序(访管)指令、陷阱(TRAP)指令。
(6) 特权指令是指仅用于操作系统或其他系统软件的指令,为确保系统与数据安全起见,这一类指令不提供给用户使用。这一类指令主要用于管理与分配系统资源,包括改变系统的工作方式,完成任务的创建或切换,变更管理存储器用的段表和页表中的内容等。特权指令对多用户或多任务系统是必要的。
(7) 其他指令,如动态停机指令、空操作指令、置条件码指令、开中断指令、关中断指令、堆栈操作指令等,用于完成某些特定的处理功能。
5.1.5指令周期及其对计算机性能和硬件结构的影响
本节内容要到第6章控制器部件的相关章节详细讲解,先在这里简单介绍有关指令周期和指令执行步骤两个基本概念。
通常把执行一条指令所用的时间叫作指令周期。一个指令周期往往要包含几个执行步骤,就是说,一条指令的完整功能需要依次经过这几个步骤的操作才能完成。例如在MIPS计算机系统中,一个指令周期可能包括读取指令、指令译码和读寄存器组、ALU执行运算、读写内存或接口、数据写回寄存器组这5个步骤,如图5.2所示。
图5.2指令的5个执行步骤
所有指令都是在取指—译码—执行(包括第(3)~(5)步)的循环中完成的。
(1) 读取指令是每一条指令必须首先完成的,所完成的功能对所有指令都相同。
(2) 指令译码完成的功能对多数的指令是类似的,例如判断指令类型、读寄存器组等。
(3) ALU执行运算所完成的是数据计算或者地址计算功能,对不同指令会有所差别。
(4) 读写内存或接口仅出现在读写内存或者读写接口指令的执行过程中。
(5) 数据写回完成把ALU的计算结果或从内存、接口读来的数据写入寄存器组。
需要注意,这5个执行步骤的前后次序是有内在联系的,每一步都会作为下一步运行的前提,不能随意变动。第1步的读取指令是后续各步骤运行的前提,只有在取得指令之后才能够知晓接下来应该完成的是什么运算处理功能、使用哪几个数据、需要怎样完成运算处理等;在第1步中还可以计算出下条相邻指令所在的存储单元地址。
在得到指令内容之后,第2步就可以检查、判别指令类型、指令操作码等。这主要体现为对指令的操作码字段内容进行译码;大部分指令执行过程中会用到寄存器组内的1~2个寄存器的内容,要在此步骤把它们读出来,作为下一步ALU执行计算的原始数据。
第3步是ALU执行运算,对于寄存器之间的数据运算等指令,完成的是对数据的运算、比较、移位等操作。运算结果通常需要写回到寄存器组的一个寄存器中,在这里已把写回操作移到更后面的一个步骤中去完成,在本步骤将把计算结果暂存到一个专用寄存器中。对存储器读写指令,ALU完成的是计算数据在存储器中的单元地址,而真正的存储器读写操作需要放到再下一个步骤中去完成。对转移等指令,ALU完成的是计算转移指令的目标地址。
第4步用于完成存储器读写功能,使用第3步计算得到的存储器地址选中的一个存储单元完成数据读写。写内存指令用于把指定的一个寄存器的内容写入选定的存储单元,读内存指令用于把选定的存储单元的内容读出来并暂存在一个专用的寄存器中,而真正写入到通用寄存器中的操作需要放到再下一个步骤中去完成。
第5步用于把第3步ALU运算的数据结果(已暂存在一个专用寄存器中)或者第4步从存储器中读出来的数据(已暂存在一个专用寄存器中)写入到指令指定的通用寄存器中。
综上所述,数据运算指令需要依次经过第1、2、3、5这4个步骤完成,写存储器指令需要依次经过第1~4这4个步骤完成,而读存储器指令需要依次经过第1~5这5个步骤完成。另外一些指令也可能经过第1~2这2个步骤或者经过第1~3这3个步骤完成。
初步结论,并不是所有的计算机都必须把一条指令的执行过程划分为这样的5个步骤,也不见得每一条指令都必须经过全部这5个步骤才能完成。例如,功能简单的指令可能只用到前第2和第3个步骤,另外一些指令可能还用到后面的第4和第5个步骤。在计算机内部,从如何选择、处理这5个执行步骤的角度来看,有以下3种方案,每个方案对指令执行速度和计算机硬件实现的复杂程度等有较大影响。
第1种方案,不管指令功能的复杂程度,让所有指令都经过这5个时间段完成,即全部指令都选用同一种指令周期,从而构成单指令周期的CPU系统。此时必须依照功能最复杂、执行用时最长的指令的运行要求来确定指令周期的长度,否则系统运行会出错。……结论是: 这种方案理论上可行,现实中不实用。
第2种方案,依据不同指令功能的繁简程度来分别确定各自的指令周期,指令需要几个执行步骤完成就为它分配几个步骤,此时可能有分别用2个步骤、3个步骤、4个步骤或5个步骤完成的指令,此而构成多指令周期的CPU系统。这一方案明显优于前一方案,指令执行速度和硬件部件的资源利用率更高,是一种较为实用的方案。
第3种方案,属于指令流水线的CPU系统,它的着眼点是进一步提高指令的执行速度。思路在于尽可能地在指令的每一个执行步骤都启动一条新指令,使程序中几条相邻指令的执行时间尽可能地重叠起来,就像工业生产中的流水线,故称指令流水线。它与前2种方案有明显区别。前2种方案实现的是指令的串行执行,即前一条指令完成之前不会启动下一条指令,在任何时间都只有一条指令处在运行中,而在指令流水的CPU系统中,当确定采用5个步骤的指令流水线时,理想情况可能有5条指令各自处在5个不同的步骤中,其理想情况可以做到每一个执行步骤都会有一条指令结束执行过程。这种方案会使得硬件设计与实现更复杂一些,但带来了更高的性能价格比,是目前被广泛选用的、最为实用的方案。
5.2基本寻址方式概述
寻址方式解决的是如何在指令中表示一个操作数的地址和指令地址,如何用这种表示得到操作数或怎样计算出操作数的地址。表示在指令中的操作数地址,通常被称为形式地址;用这种形式地址并结合某些规则,可以计算出操作数在存储器中的存储单元地址,这一地址被称为数据的物理(有效)地址。计算机中常用的基本寻址方式有以下8种类型。
1. 立即数寻址
操作数直接给出在指令字中,即指令字中直接给出的不再是操作数地址,而是操作数本身。它的主要用法是把一个确定的数值传送到一个通用的寄存器中,或直接用于运算。当该数据占用的位数较少时(如小的整数、一个西文字符),可把该数值安排在第一个指令字中,则在读出指令的同时也得到相关数据;否则只能将其存放在指令的第二个字中,这就构成了双字指令,如图5.3所示。双字指令不利于指令流水,很少出现在RISC计算机的指令系统中。
图5.3立即数寻址
2. 直接寻址
直接寻址是在指令中直接给出操作数在存储器中的地址。这是计算机中可用的寻址方式之一。与立即数寻址方式类似,当该地址占用的位数较少时(能访问的存储空间范围较小),可将其安排在第一个指令字中,则在读出指令的同时也得到相关地址,否则只能用双字指令实现,如图5.4所示。更多情况下采用的是变址等其他寻址方式提供内存单元地址。
图5.4直接寻址
3. 寄存器寻址、寄存器间接寻址
寄存器寻址是在指令字中给出通用寄存器的编号(名字、地址),所访问的寄存器的内容就是运算用到的数据。由于表示一个通用寄存器编号占用的位数少,有利于缩短指令字的长度;用寄存器暂存数据并用于完成运算速度更快,故这是最基本最常用的寻址方式。
寄存器间接寻址,在寄存器中给出的不是操作数,而是操作数在存储器中的地址,这被称为寄存器间接寻址,这也是最常用的寻址方式之一,如图5.5所示。
图5.5寄存器间接寻址
4. 变址寻址
变址寻址是把在指令字中给出的一个数值(称为变址偏移量)与一个被称为变址寄存器的内容相加之和作为操作数的地址,用于读写存储器,如图5.6所示。它特别适合于处理数组型数据。有些计算机,更设置了自动对变址寄存器内容自动增1和减1的操作功能。与立即数寻址方式类似,依据变址偏移量的范围大小,变址指令可能为单字或双字两种情况。
图5.6变址寻址
5. 相对寻址
相对寻址是指把在指令字中给出的一个数值(称为相对寻址偏移量)与程序计数器PC的内容相加之和作为操作数的地址或转移指令的转移地址,如图5.7所示。相对寻址偏移量决定目标地址与当前指令的地址距离是多少,相对寻址偏移量可以为正值或负值,可以有不同的取值范围,可能只占一个指令字的一部分(一个字段),其转移的地址范围小,或单独占用一个计算机字,则可以转移到存储器的任何位置,故相对寻址指令也有单字与双字之分。
图5.7相对寻址
6. 基地址寻址
基地址寻址是指把在程序中所用的地址与一个特定的寄存器(称为基地址寄存器)的内容相加之和作为操作数的地址或指令的地址。它与变址寻址、相对寻址形式上有某些类似之处,但其用法却与二者有很大差别,主要用于为多道程序或浮动地址程序定位存储器空间。
7. 间接寻址
间接寻址,在指令字中给出的不是一个操作数的地址,而是一个操作数地址的地址,或一条指令地址的地址。采用间接寻址读写数据需两次访问存储器,速度较慢,少用为好,如图5.8所示。
图5.8间接寻址
间接寻址的形式地址可以有多种不同方案,图5.8中所给出的只是一个最简单的例子。
8. 堆栈寻址
堆栈是存储器中(或专用寄存器组)一块特定的按“后进先出”原则管理的存储区。该存储区中被读写单元的地址是用一个特定的寄存器给出的,该寄存器被称为堆栈指针(Stack Pointer,SP)。如果有些指令,其操作码部分已经指明一个操作数为堆栈中的一个单元(通常为堆栈栈顶)的内容,则它就已经约定将使用SP访问该单元,故不必在指令的地址字段中另加指定。在采用堆栈结构的计算机系统中,大部分指令表面上都表现为无操作数指令的形式。通常情况下,在读写堆栈中的一个单元的前后,都伴有自动完成对SP内容的增量或减量操作。
请注意,操作数地址字段也被用于给出指令地址,例如转移指令的转移目标地址,子程序的入口地址等。
上述8种寻址方式,是计算机中常用的基本寻址方式,可以单独使用,也可以把它们中的某几种组合在一起,如变址后再间接寻址,变址与基地址寻址的组合,间接寻址还可以连续多次执行等。此外,不是每一台计算机都使用所有的寻址方式,也不一定要把寻址方式设计得很复杂,简单的寻址方式可以使计算机系统有更高的运行效率。
5.3指令系统举例
计算机的指令系统有RISC和CISC两种类型。RISC是20世纪80年代出现的全新概念的计算机系统。它以精简高效的指令系统、精巧高速的硬件组成、精妙智能的编译软件,达到了低价与高性能的理想目标,也就是说,执行同样处理功能的程序所占用的时间要比CISC计算机更短。请看公式: P=I×CPI×T,符号P表示执行一个程序所用的时间,它由该程序中包含的机器指令的总条数I,执行一机器指令所需要的机器周期数CPI,每个机器周期的时间长度T这3个数值的乘积决定。这3个数值在RISC和CISC两种机器中有比较大的差距,如表5.1所示, RISC机器的运行性能可能要比CISC机器高2~5倍。表5.1RISC和CISC的对比ICPITICPITRISC1.2~1.41.3~1.7<1CISC14~101RISC计算机的指令格式规范且种类少,使用的寻址方式简单,指令条数少,指令完成的操作功能简单。大量的统计结果表明,在CISC机器的所有指令中,功能简单、所用硬件更节省的约20%的指令,将占用程序80%的运行时间;反过来说,另外的约80%的功能更复杂、硬件实现代价很高的指令并不被经常使用。到了RISC计算机中,更倾向选用软件子程序来实现这些指令的功能,使硬件实现变得更为精简,运行速度更快。RISC计算机追求的目标之一,就是使指令每一步操作所用的时间要尽可能短,并且力争在每个执行步骤都能完成一条指令的执行过程。同时尽力在编译程序中增强性能优化能力,从硬件软件两个方面来提高RISC计算机的性能。
下面介绍4种计算机的指令系统实例。在这几个指令系统中,指令操作码部分的组织和编码,操作数地址字段的设计方案各有一定的代表性。其中Pentium Ⅱ计算机的指令系统属于典型的CISC结构;MIPS32计算机的指令系统属于典型的RISC结构;PDP11计算机的指令格式,长度扩展的指令操作码和规范、别致的寻址方式是它的突出特点;上述3种指令系统更多地用于开阔眼界,扩展学生的知识面。教学计算机的指令系统是由本书作者专门为计算机组成原理课程的教学和实验而设计的,指令格式简明规范,既有多种基本寻址方式、比较齐全的常用指令,又有配套的汇编语言支持,这套指令与多数人较为熟悉的Intel 8086计算机的指令有某些类似但更为简化,选用这套指令系统设计、实现了多个型号的教学实验设备,在本教材中说到的教学计算机更多地针对TECXPⅡ这个型号。教学计算机的指令系统将在教学的各个环节中反复用到,更多地关注一些是必要的。
5.3.1Pentium Ⅱ计算机的指令系统
Pentium计算机是应用面较广、影响力较大的个人计算机,其指令系统有一定的典型性。这里更多地介绍它的指令格式和选用的寻址方式,给出部分指令而不是完整的指令集。Pentium Ⅱ计算机的指令格式如图5.9所示。
图5.9Pentium Ⅱ的指令格式
下面给出指令前缀各部分的功能简介。
ISBN | 9787302465546 |
---|---|
出版社 | 清华大学出版社 |
作者 | 宋佳兴、王诚 |
尺寸 | 16 |