《计算机组成与系统结构》课件第5章_第1页
《计算机组成与系统结构》课件第5章_第2页
《计算机组成与系统结构》课件第5章_第3页
《计算机组成与系统结构》课件第5章_第4页
《计算机组成与系统结构》课件第5章_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章指令系统5.1指令系统概述5.2指令系统结构层定义5.3指令设计5.4基本寻址方式5.5

CISC与RISC5.6典型指令系统

5.1指令系统概述

计算机完成各种各样的工作都是通过执行计算机程序来体现的。程序是由一系列有时间顺序、有逻辑关系的指令构成的。指令是控制计算机硬件完成指定的基本操作(如加、减、移动等)的命令,是用户使用计算机和计算机本身运行的最小功能单位。能被一台计算机执行的全部指令的集合称为该机的指令系统(也称指令集,即InstructionSet)。指令有两种表现形式:机器指令和助记符指令。

下面给出的两条指令示例为Intel系统的指令:在计算机体系结构中,根据对设计者、使用者不同的需求和要求,计算机被分为多个层次,图1.2就是一种通俗的计算机分层结构。从更深层、更专业的角度,可以将图1.2的下面三层描述为微体系结构层、指令系统结构(InstructionSystemArchitecture,ISA)层和操作系统层,见图5.1。图5.1指令系统结构层的作用

5.2指令系统结构层定义

5.2.1存储模式

1.数据存储顺序

不同的计算机系统采用不同的方式来存储数据。

(1)大端存储(Big-EndianOrdering):

(2)小端存储(Little-EndianOrdering):

例5.1一个32位的十六进制数据12345678H,存储在1000H地址开始的以字节编址的主存空间中,其存储结果见表5.1。

2.边界对齐

所谓边界对齐是指数据存储在低位地址以全0开始的连续存储单元中。在64位字长的计算机系统中,边界对齐的两字节数据的地址是2的整数倍,半字地址是4的整数倍,字地址是8的整数倍,见图5.2(a)。当所存数据不能满足此要求时,可填充一个或多个空白字节。

在数据边界未对齐的计算机中,数据(例如一个字)的存储将跨两个边界对齐的存储单元,此时读写一个完整的数据需要访问两次存储器,并需对高低字节的顺序进行调整,见图5.2(b)。图5.2以小端模式存储数据(0807060504030201H)的情况

3.堆栈(Stack)

在所有计算机系统中,对于主存的大部分空间,允许在任何时间对其中的任何存储单元进行读写操作,且读写时间相同,这种特性称为主存的随机读写特性。但有时我们希望对主存的操作有一定的顺序性,堆栈就是主存中被特殊定义的一块存储区域,它具有先进后出(FirstInLastOut,FILO)的操作规则。在使用堆栈之前,先要对堆栈的大小、在主存中的位置做出定义。使用堆栈时用三个专用地址寄存器来管理:

(1)堆栈指针(StackPointer,SP):指示当前可操作的堆栈单元。

(2)堆栈基址(StackBase,SB):指示堆栈的底部。

(3)堆栈界限(StackLimit,SL):指示堆栈的最顶端。

堆栈界限=堆栈基址±堆栈大小图5.3堆栈的基本操作

4.冯·诺依曼结构和哈佛结构

在冯·诺依曼计算机中规定,指令与数据均用二进制表示,并可在整个主存中混合存放,如图5.4(a)所示。图5.4两种主存结构

5.加载/存储体系结构

在许多RISC系统中,指令系统只提供了两条对主存操作的指令,即加载(Load)和存储(Store)指令。Load指令实现将主存的数据传送到寄存器,Store指令实现将寄存器的数据传送到主存。在这种加载/存储体系结构中,所有运算的源操作数由寄存器或指令提供,而不是直接来自主存;运算结果也必须放在寄存器中,而不是直接写入主存。5.2.2寄存器组织

寄存器是存储体系中最上层(速度最快、容量最小)的存储部件,是CPU内部配合控制器、运算器工作的重要部件,也是指令系统结构层定义的重要对象。从指令系统结构层来看,寄存器是软件设计者唯一能操作的CPU内部资源。5.2.3数据类型

数据作为指令的处理对象,需要有不同的类型、不同的格式表示。数据类型不同,则处理方法不同,需要的硬件支持也不同。5.2.4指令

指令系统是指令系统结构层的主要特征,它的每一条指令可以被CPU执行,并规定了计算机的基本功能。由指令构成的程序控制了计算机系统的运行,并决定了计算机系统要完成的任务。移位类运算指令一般包括算术左移和右移、逻辑左移和右移、带进位循环(大循环)左移和右移、不带进位循环(小循环)左移和右移,可以实现对操作数移一位或若干位。具体操

作如图5.5所示。图5.5移位操作

5.3指令设计

在确定了指令功能、数据类型、寄存器组织等与指令系统架构相关的信息之后,具体的指令设计就成为指令系统设计的核心。5.3.1指令格式

为了使指令能够有效地指挥计算机完成各种操作,一条指令应包含两个基本要素:操作码和地址码,其基本格式如下:5.3.2地址码设计

指令功能不同,需要的操作数数量也有所不同。利用地址码字段可以为指令指定源操作数、目的操作数和下条指令地址等信息,格式如下:按照地址码字段的数量,指令也可以分为四地址指令、三地址指令、两地址指令、一地址指令和零地址指令,其指令格式如下:5.3.3操作码设计

1.定长操作码

对所有指令的操作码用相同位数的二进制数进行编码即为定长操作码编码方式。例如,某计算机的指令系统需要设置N条指令,若所有指令的操作码均用n位二进制数表示,则

应满足关系式:

N≤2n。从2n个编码中选出N个编码分配给N条指令,即可完成操作码设计。

2.变长操作码

对不同类型的指令操作码用不固定长度的二进制数进行编码即为变长操作码编码方式,也称作扩展操作码编码方式。

扩展操作码技术是一种重要的指令优化技术,其技术核心是:

①使程序中指令的平均操作码长度尽可能短,以减少操作码在程序中的总位数;

②尽可能充分地利用指令的二进制数位,以增加指令字表示的操作信息。扩展操作码的设计原则如下:

(1)如果指令字长固定,则长地址码对应短操作码,操作码长度随地址码长度缩短而增加。

(2)如果指令字长可变,则以指令使用频度(指令在程序中出现的概率)作为设计依据,使用频度高的指令用短操作码,使用频度低的指令用长操作码,这便是霍夫曼(Huffman)

编码原理。

(3)设计总是从短操作码开始,并要保证当前使用的操作码编码与未来要扩展的操作码编码能够有效地区分。

1)基于霍夫曼编码原理设计变长操作码

统计发现,在程序设计过程中,由于指令功能的不同和设计者对指令使用爱好的不同,致使一个指令系统中的各种指令使用频度大不相同。表5.2是针对SPECint92测试程序对

80x86指令使用情况的统计结果。

例5.2某计算机有10条指令,它们的使用频率分别为0.30、0.20、0.16、0.09、0.08、0.07、0.04、0.03、0.02、0.01。用Huffman树(最优二叉树)对它们的操作码进行编码,

并计算平均代码长度。图5.6

Huffman树

解图5.6为基于霍夫曼编码原理构造的Huffman树,根据Huffman树得出的Huffman编码结果及各编码的长度列表

如下:

例5.3某计算机系统中有20条指令的使用频度是80%,80条指令的使用频度是15%,40条指令的使用频度是5%,试设计固定长度和可变长度的操作码。

(1)定长操作码:140条指令,8位操作码长度,从256种编码中选出140种编码分配给140条指令作为它们的操作码。

(2)扩展操作码:一种设计结果列于下表。

2)基于特定规则扩展操作码

设计扩展操作码不仅要考虑操作码的可分辨性,还应考虑其是否便于快速译码。图5.7示出了两种以某种特定规则设计的扩展操作码。图5.7特定规则的扩展操作码编码方法

3)依据地址码数量扩展操作码

对于指令字长度固定的指令系统,为了充分利用指令的二进制位,操作码长度一般随地址码数量多少而变化。

例5.4某指令系统的指令长度确定为32位,由三地址、二地址、一地址、零地址指令组成,其中各类指令中地址字段位数如下表,则各类指令的操作码可以设计为几位?各类指令数最多可以是多少?

解三地址指令:操作码6位,指令数n3≤26-1

双地址指令:

操作码11位,指令数n2≤(26-n3)×25-1

单地址指令:

操作码16位,指令数n1≤((26-n3)×25-n2)×25-1

零地址指令:

操作码32位,指令数n0≤(((26-n3)×25-n2)

×25-n1)×2165.3.4指令长度设计

指令长度设计的一般原则是:

(1)短的操作码与多地址码字段配合,长的操作码与简单地址码组合。

(2)指令长度一般设计为总线宽度的整数倍。

(3)指令长度为存储器最小可寻址单位的整数倍。理论上,可以按下式确定指令长度,即

(5-1)

式中假设指令中有M个地址码字段,每个地址码字段的长度可以不相同。在实际的计算机系统中,有三种常用的设计方案:

(1)定长操作码,变长指令码。操作码的长度固定,且集中放在指令字的第一个字段中,指令的其余部分全部用于地址码。例如8086指令系统,指令采用8位定长操作码、1~5字节变长指令码的格式。

(2)变长操作码,定长指令码。即在指令码长度固定的情况下,让操作码位数随地址码长度的减少而扩展,如例5.4所示。

(3)定长操作码,定长指令码。例如MIPS指令系统,指令采用6位定长操作码、32位定长指令码的格式。

5.4基本寻址方式

寻址方式在指令中以两种方式呈现:

(1)由操作码决定其寻址方式,称为隐式寻址。

(2)指令中设置寻址方式字段,由寻址方式字段的不同编码来指定操作数的寻址方式,称为显式寻址。

1.隐含寻址

该寻址方式的特征是,操作数的存放地由操作码指定。

以Intel指令为例,加法十进制调整指令DAA隐含规定调整对象为寄存器AL,乘法指令MULBL隐含规定乘数之一是8位寄存器AL、乘积存放在16位寄存器AX中。

2.立即寻址

该寻址方式的特征是,操作数在指令中,见图5.8。图5.8立即寻址

3.寄存器寻址

该寻址方式的特征是,操作数在指令指定的寄存器中,见图5.9。图5.9寄存器寻址

4.直接寻址

该寻址方式的特征是操作数地址在指令中,操作数在主存单元中,见图5.10。图5.10直接寻址

5.间接寻址

该寻址方式的特征是,操作数地址的地址在指令中,操作数在主存单元中,见图5.11。图5.11间接寻址

6.寄存器间接寻址

该寻址方式的特征是,操作数地址在指令指定的寄存器中,操作数在主存单元中,见图5.12。图5.12寄存器间接寻址

7.相对寻址

该寻址方式的特征是,操作数地址由程序计数器和指令提供的地址偏移量决定,操作数在主存单元中,见图5.13。图5.13相对寻址

8.基址寻址

该寻址方式的特征是,操作数地址由基址寄存器和指令提供的地址偏移量决定,操作数在主存单元中,见图5.14。图5.14基址寻址

9.变址寻址

该寻址方式的特征是,操作数地址由变址寄存器和指令提供的地址偏移量决定,操作数在主存单元中,见图5.15。图5.15变址寻址

10.堆栈寻址

该寻址方式通常由指令操作码指定,用在涉及堆栈操作的指令中,所寻址的操作数在堆栈中。

压栈、调用指令中的目的操作数地址或弹出、返回指令中的源操作数地址由堆栈指针SP隐含指定,即EA=(SP)。依据SP对堆栈进行操作数压栈或弹出后,SP的值会自动修改指向新的栈顶单元,见图5.3。

5.5

CISC与RISC

5.5.1指令系统结构的发展

在已进入计算机软硬件协同设计的今天,计算机的每一项设计决定都应该综合考虑以下因素:①技术支持;②计算机体系结构;③编程语言;④编译技术;⑤操作系统。同时所做出的设计决定也会对这些因素产生影响。所以,指令系统结构发展中的标志性事件都与计算机体系结构的进步密不可分。

指令系统结构(ISA)的发展经历了以下阶段(见图5.16)。图5.16指令系统结构的发展

1.累加器结构(AccumulatorArchitecture)

2.紧凑代码和堆栈结构(CompactCode&StackArchitecture)

3.编程模型与实现的分离

4.高级语言计算机结构(High-LevelLanguageComputerArchitecture,HLLCA)

5.通用寄存器结构(General-PurposeRegisterArchitecture)

6.复杂指令集计算机结构(ComplicatedInstructionSetComputerArchitecture)

7.精简指令集计算机结构(ReducedInstructionSetComputerArchitecture)

8.超长指令字结构(VeryLongInstructionWordArchitecture)5.5.2

CISC

早期CISC设计有如下特点:

(1)指令系统复杂,即指令数多、寻址方式多、指令格式多;

(2)绝大多数指令执行需要多个时钟周期;

(3)有多种指令可以访问存储器;

(4)CPU控制器采用微程序控制方式实现;

(5)寄存器数量有限。规模庞大的指令系统在提供丰富指令、有助于灵活程序设计的同时,也存在诸多弊端:

(1)为适应丰富的指令系统,CPU控制器必须很复杂,相应的程序控制存储装置必须有更大空间,这会增加指令执行的时间,抵消复杂指令预期带来的速度优势;

(2)繁多的指令会使计算机研制周期变长,调试和维护难度变大;

(3)复杂指令系统必然增加硬件设计和制造的复杂性,增加了研制成本。5.5.3

RISC

RISC结构计算机具有如下特点:

(1)只设置使用频度高的简单指令,所以指令的操作种类少,寻址方式少;

(2)指令格式规则,长度固定,便于简单统一的译码,可使控制器简化、硬件结构精简;

(3)仅通过Load和Store指令访问主存;

(4)通用寄存器数量多,一般有几十甚至几百个,大多数操作在寄存器之间进行;

(5)在非流水线RISC中,单条指令可在单机器周期内完成;在流水线RISC中,对于大多数指令有CPI=1;

(6)采用硬布线控制器,不使用微代码(即微程序),有利于提高时钟频率和CPU速度,能够更好地响应中断;

(7)可简化硬件设计,降低成本及便于超大规模集成电路实现;

(8)有利于多流水线、多核CPU实现;

(9)适宜高度优化编译器(即编译程序);

(10)精简的指令使程序阅读、分析难度加大;

(11)不能同CISC兼容,解决办法一是将源程序在CISC机器上重新编译,办法二是用目标代码翻译器将CISC代码翻译为RISC代码。

5.6典型指令系统

5.6.1

IntelCPU指令系统

1.IntelCPU指令系统发展

随着IntelCPU功能的不断提升,其指令格式也在不断扩展,指令数量亦在不断扩大。表5.3是IntelCPU指令系统的发展历程,从中可以充分体现出这个系列指令系统的规模和

始终坚守的向后兼容特性。

2.Intel64和IA-32体系结构的指令格式

当指令用符号表示时,IA-32汇编语句(指令)格式为:

label:mnemonicargument1,argument2,argument3

其中,label是汇编语句(或指令地址)标识符,mnemonic是指令操作码助记符,操作数argument1、argument2和argument3是可选项,依据操作码可以有0~3个操作数。例如:

LoadReg:MOVEAX,Date

Intel64和IA-32体系结构指令编码格式如图5.17所示,它是对8086指令格式的扩展,它由可选的指令前缀(按任意次序)、基本操作码字节(最多3字节)、寻址方式指定字节(如果需要,由ModR/M和SIB字节组成)和地址偏移量域(如果需要)、立即数域(如果需要)组成。指令长度最短1字节,最长17字节。图5.17

Intel64和IA-32体系结构指令编码格式

1)指令前缀(InstructionPrefixes)

每条指令可以冠以前缀或不加前缀,指令前缀分为4组:

(1)组1:封锁和重复前缀(LockandRepeatPrefixes)。封锁前缀强制在多处理器环境中共享存储器的独占使用。重复前缀引发一条指令对串的每个元素重复执行。

(2)组2:段超越前缀(SegmentOverridePrefixes)。该前缀允许地址跨越不同属性的段(CS、SS、DS、ES、FS、GS)。

(3)组3:操作数长度超越前缀(Operand-sizeOverridePrefix)。该前缀允许程序在16位与32位操作数之间转换。

(4)组4:地址范围超越前缀(Address-sizeOverridePrefix)。该前缀允许程序在16位与32位地址空间之间转换。

2)操作码(Opcodes)

基本操作码1~3字节,而某些指令附加的3位操作码在ModR/M字节中。该字段用来指明指令的类型和功能。8086系统对操作码采用1字节的固定长度编码,而从80386开始

扩展了操作码。

Intel64和IA-32指令包括以下类型:

(a)通用目的指令,如数据传送、二进制/十进制整数算术运算、逻辑运算、移位和旋转运算、位操作、串操作、程序控制、标志控制、段寄存器操作等,与8086指令兼容;

(b)x87FPU协处理器指令(FPU-Floating-PointUnit);

(c)SIMD指令(SIMD-SingleInstructionMultipleData);

(d)MMX指令(MMX-MultiMediaeXtensions);

(e)SSE/SSE2/SSE3/SSSE3/SSE4扩展指令(SSE-StreamingSIMDExtensions,SSSE-SupplementalSSE);

(f)系统指令。

3)寻址方式(Addressing-formSpecifier)

ModR/M字节或ModR/M+SIB(Scale-Index-Base)字节指定32位系统中的寻址方式。32位系统规定的寻址方式除了将ModR/M字节中提供基本地址的寄存器长度和数量扩大之外,还增加了由SIB字节指定的带比例因子的寻址方式,其有效地址EA由基址(Base)、指针(Index)、位移量(Displacement)和比例因子(ScaleFactor)运算得到,即

EA=(基址寄存器)+(指针寄存器)×比例因子+位移量图5.18

IntelCPU对存储器寻址时逻辑地址到物理地址的转换

4)偏移量(Displacement)

地址偏移量域提供某些寻址方式需要的偏移地址(也称相对地址)。8086系统中的偏移地址是8位或16位的带符号数,80386之后系统中的偏移地址是8位、16位或32位的带符号数。

5)立即数(Immediate)

立即数域在立即寻址时提供指令所需的立即数。

3.IA-32e模式的指令格式

IA-32e模式有两个子模式:

(1)兼容模式(CompatibilityMode)。允许64位操作系统运行大多数继承的未修改的保护模式软件。

(2)64位模式(64BitMode)。允许64位操作系统运行访问64位地址空间的应用程序。

64位模式的指令格式见图5.19,与图5.17比较,它在IA-32指令格式的基础上又增加了1字节的REX前缀。图5.19

64位模式的指令格式

REX前缀起如下作用:

①指定GPR和SSE寄存器(GPR-General-Purpose

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论