计算机组成原理(第四章NEW)_第1页
计算机组成原理(第四章NEW)_第2页
计算机组成原理(第四章NEW)_第3页
计算机组成原理(第四章NEW)_第4页
计算机组成原理(第四章NEW)_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

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

文档简介

第四章指令系统

课程教学要求本章内容:

4.1指令系统的发展与性能要求

4.2指令格式

4.3操作数的类型

4.4指令和数据的寻址方式

4.5典型指令

本章小结4.1

指令系统的发展和性能要求

指令系统的几个常用名词:

程序:计算机中若干条指令的有序组合。

指令:

要计算机执行某种独立完整操作的命令。从计算机组成的层次结构来说,指令分别有微指令、机器指令和宏指令。

微指令:微程序级的命令,它属于硬件(命令);

宏指令:由若干条机器指令组成的软件命令,它属于软件;

机器指令(指令):介于微指令与宏指令之间,每条指令可完成一个独立、完整的运算或其它操作。

指令系统:

一台计算机中所有机器指令的集合。

指令系统

表征计算机性能的重要因素。指令的格式与功能不仅直接影响到机器的硬件结构,也直接影响到机器的软件结构,以及机器的适用范围。4.1.1指令系统的发展

上世纪50年代:指令系统只有定点加减、逻辑运算、数据传送、转移等十几至几十条指令。

60年代后期:增加了乘除运算、浮点运算、十进制运算、字符串处理等指令,指令数目多达一二百条,指令本身及其处理形式也更加灵活。

60年代后期开始出现系列计算机(指基本指令系统相同、基本体系结构相同的同一系列计算机)。同一系列的计算机有共同的指令级,而且可通过“升级”的方法,解决新旧机种的软件兼容性问题,大大减少了软件开发费用。指令系统70年代末期:

大多数计算机的指令系统多达几百条。这些计算机被称为:复杂指令系统计算机(CISC)。庞大的指令系统功能强大,同时,也带来了可靠性不高、维护与调试困难、硬件资源浪费等问题。随着VLSI技术的发展,人们又提出了易于使用和实现的:精简指令系统计算机(RISC)。后续讨论可知:CISC与RISC在追求目标、实现手段以及结构特征上都有着很大不同。指令系统20:80规律4.1.2指令系统的性能要求

指令系统的性能决定了计算机的基本功能,它的设计直接关系到计算机的硬件结构和用户的需要。一个完善的指令系统应满足如下四方面的要求:完备性、有效性、规整性、兼容性。(见教材P114-115)指令系统

①完备性:

用汇编(机器)语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便。

②有效性:利用该指令系统所编写的程序能够高效率的运行。如:程序占据存储空间小、执行速度快。一般来说,一个功能更强、更完善的指令系统,必定有更好的有效性。

③规整性:包括对称性、匀齐性、指令格式和数据格式的一致性。

对称性:

在指令系统中所有的寄存器和存储器单元都可同等对待,所有的指令都可使用各种寻址方式;

匀齐性:

指一种操作性质的指令可以支持各种数据类型;

指令格式和数据格式的一致性:

指令长度和数据长度有一定的关系,以方便处理和存取。

④兼容性:系列机各机种之间具有相同的基本结构和共同的基本指令集,因而指令系统是兼容的,基本软件可以通用。当然,做到所有软件都完全兼容是不可能的,通常是指“向上兼容”,即:低档机上运行的软件可以在高档机上运行。4.1.3低级语言与硬件结构的关系

计算机程序设计语言包括:高级语言和低级语言。

高级语言:如C,JAVA等。

特点:语句规则和用法与具体机器的指令系统无关。

低级语言:机器语言(二进制语言);

汇编语言(符号化的二进制语言)等。

特点:低级语言是面向机器的语言,其与具体机器的指令系统密切相关。

机器语言:直接由指令代码组成的指令语言;

符号语言:用指令助记符来表示的机器语言(如汇编语言)。指令系统已知:计算机能够直接识别和执行的唯一语言:

——二进制语言(机器语言)。高级语言程序借助汇编程序或编译程序 翻译成机器语言程序。

机器语言依赖于计算机的硬件结构和指令系统。不同的机器有不同的指令语言,所以,用机器语言编写的程序不能在不同类型的机器上运行。

一些高级语言通过提供与汇编语言之间的调用接口,用于直接访问计算机的硬件资源。

比较内容高级语言低级语言1对程序员的训练要求

(1)通用算法

(2)语言规则

(3)硬件知识

有较少不要

有较多要2对机器独立的程度独立不独立3编制程序的难易程度易难4编制程序所需时间短较长5程序执行时间较长短6编译过程中对计算机资源的要求多少表4.1:高级语言与低级语言的性能比较(教材P116)4.2

指令格式

指令系统

指令字:(简称指令)表示一条指令的机器字。

指令格式:用二进制代码表示的指令字结构形式。基本格式:通常由“(操作码)字段+(地址码)字段”组成。

操作码字段OP

地址码字段A操作码字段OP:表示指令所要完成的各种操作与功能;地址码字段A:又称为操作数字段,通常指定参与操作的操作数、或操作数的地址。(二进制代码)10100111010

11101101011指令字:1操作码

指令系统OP字段地址码字段

不同的操作码字段代码,可表示不同的指令。

n位操作码OP:可表示2n条不同的指令。(如:4位OP可表示16条指令;7位可表示128条指令等)∴

操作码字段的位长设定:一般取决于计算机指令系统中指令的总条数。(二进制代码)例如:

某指令系统共有6条指令,则指令字中用3位操作码就够;如果有50条指令,则至少需要

?位

操作码。注意:

操作码字段OP可以是固定长度的、也可以是变长、扩展的,视指令系统的需要而定。指令系统6位OP字段地址码字段?位

OP字段地址码字段

当指令字长度固定时,可以利用操作码和地址码字段长度的调整,扩展OP长度,进而增加指令的条数,即:在指令字长不变的条件下,尽可能定义更多的操作种类。(操作码扩展法)操作码扩展法:(在微型计算机指令设计中常用,见后面例题)

地址码字段A地址码OP扩展2地址码

(又称操作数)

一条指令中有几个操作数,称该指令为:几操作数指令或几地址指令。

操作数一般包括:源操作数1、源操作数2及目的操作数这三种数,因而就形成了三地址指令格式。在此基础上,后来又发展成二地址格式、单地址格式和零地址格式,如下图所示:指令系统操作码OPA1A2A3三地址指令

二地址指令

单地址指令

零地址指令

操作码OP

A1A2操作码OPA操作码OP

二地址指令常称为双操作数指令,它的两个地址码字段分别指明参与操作的两个数在内存中或运算器中通用寄存器的地址,A1又作存放操作结果的地址。

(A1)

OP

(A2)→A1

OP字段

地址码字段三地址指令字中有三个操作数地址。

(A1)

OP

(A2)→A3

A1为被操作数地址,也称源操作数1地址;A2为源操作数2地址;A3为目的操作数地址。同样,A1,A2,A3既可以是内存中的单元地址,也可以是运算器中通用寄存器的地址。→表示把操作(运算)结果传送到指定的地方。源操作数1源操作数2目的操作数

单地址指令又称为单操作数指令。通常这种指令通常以运算器中累加寄存器AC中的数据为被操作数,指令字的地址码字段所指明的数为操作数,操作结果又放回累加寄存器AC中。

(AC)

OP

(A)→AC

OP表示操作性质;(AC)表示累加寄存器AC中的数;(A)表示内存中地址为A的存储单元中的数或编号为A的通用寄存器中的数;

零地址指令的指令字中只有操作码,而没有地址码。(如:系统复位RST、累加器清零CLR等)操作码OPA1A2A3三地址指令二地址指令单地址指令零地址指令操作码OP

A1A2操作码OPA操作码OP注意到:随着地址码的减少,指令中会出现若干空闲位。∴可以利用地址码的减少,来扩展操作码长度,有效地增加指令的条数。(见后面例题)[例]利用地址码的减少,来扩展操作码长度,增加指令条数。OPA1A2A3000000011110…A1A1A1…A2A2A2…A3A3A3…A2A2A2…A3A3A3…111111111111…000000011110…111111111111…111111111111…111111111111…000000011111…111111111111…111111111111…A3A3A3…000000011110…4位操作码:8位操作码:12位操作码:16位操作码:最多15条二地址指令最多15条一地址指令16条零地址指令最多15条三地址指令(4)(4)(4)(4)指令字长16位见后面例题可见:在指令字长固定的情况下,利用操作码扩展,可以有效地增加指令的条数。(1)存储器-存储器(SS)型指令:A1、A2都是内存地址

二操作数分别为:D1=M(A1);D2=M(A2)

特点:参与操作的数都在内存M里,从内存某单元中取出操作数、把操作结果存入存储单元。

机器执行这类指令需要多次访问内存,因此执行速度较慢。操作码A1A2以二地址指令为例:【指令的基本类型】(教材P117~118)

根据操作数的实际物理位置,指令可归纳为如下三种类型。地址为A1的存储单元中的内容地址为A2的存储单元中的内容(2)寄存器-寄存器(RR)型指令:(A1、A2都是寄存器号)

特点:参与操作的数都在寄存器R中,从寄存器中取操作数,把操作结果放到另一寄存器。(注意:寄存器都在CPU中)

执行这类指令时不需要访问内存,在CPU内部直接完成。

因此,指令的执行速度很快。操作码OPA1A2RiRj

(Ri)OP(Rj)→Rj(3)寄存器-存储器(RS)型指令:

特点:一个操作数在寄存器R中,另一操作数在存储器M(Ai)中。因此,这类指令的执行速度介于RR与SS指令之间。

操作码A1A2

为了提高指令的功能,在指令格式设计中,可以灵活地运用各种类型的指令。RiRj3指令字长度

指令字长度:一条指令所用的二进制码的总位数。

机器字长:计算机能直接处理的二进制数码的位长,它决定了计算机的运算精度。(如:16位机、32位机、64位机等)指令字长的设计包括:

单字长指令:指令长度=机器字长度;

半字长指令:….;

双字长指令:….;

多字长指令:….。指令系统通常:机器字长与主存单元位长相同。多字长指令:

如:三字长指令格式

主要缺点:需要多次访问内存才能取出一条完整的指令,降低了CPU的运行效率,不利于指令编译优化。(特殊需要时才使用)

操作码

操作数地址1

操作数地址2

①②③

【等长指令字结构】:

各种指令字长度是相等的。这种指令字结构工整、编译方便。

【变长指令字结构】:指令字的长度随指令功能而变化。变长指令字结构灵活,能充分利用指令长度,但指令的译码、编译及控制要复杂一些。

指令系统指令字结构:4指令助记符

∵必须采用二进制代码作为机器码,计算机硬件电路才能识别。而用二进制代码来手工直接编程,既非常麻烦、又难以检查和维护。

∴为了便于编写和阅读程序,每条指令代码通常约定用简化英文缩写字母来表示。这种缩写字符叫做指令助记符。指令系统LAD111取数STO110存数JSR101转子程序JMP100跳转MOV011传送SUB010减法ADD001加法指令助记符操作码OP

指令指令系统例如:某机器共有7条指令(用三位操作码OP既可),各指令的OP设置如下表:

由于指令助记符提示了每条指令的含意,比较容易记忆,书写比较方便,阅读、修改、调试程序也容易得多。例如:

1

MOVR0,R1

;(R1)→R0

2

LADR1,326;(326)→R1

3

ADDR2,R1;(R1)+(R2)→R2

4

STOR2,(R3);(R2)→(R3)

5

JMP101;101→PC

注意:在不同的计算机中,指令助记符的规定是不一样的。因此,指令助记符还必须转换成与机器相对应的二进制码(机器码)。

借助汇编程序,可以自动完成汇编语言“翻译”。

指令系统10110000121111011100100110300101001411011011510000101某段程序机器码什么意思?

MOVR0,R1

;(R1)→R0

LADR1,326;(326)→R1

ADDR2,R1;(R1)+(R2)→R2

STOR2,(R3);(R2)→(R3)

JMP101;101→PC

(用汇编语言表述)5指令格式举例

(1)八位微型计算机的指令格式

8位机的字长较短,指令结构常采用可变字长形式,包含单字长、双字长、三字长指令等多种。指令系统操作码

操作码

(单字长指令)

(双字长指令)

(三字长指令)

操作数地址

操作码

操作数地址1

操作数地址2

070707

若内存按字节编址,则对于8位机来说,单字长指令每执行一条指令后,指令地址加1;双字长指令或三字长指令每执行一条指令后,指令地址要加2或加3。可见多字长的指令格式不利于提高机器速度。(2)MIPSR4000指令格式

(教材P119)

MIPSR4000机为32位RISC机,采用32位定长指令格式,其指令字长32位,其指令格式如下表所示。6位5位5位5位5位6位opRsRtRdshamtfunctRR型(R型)OP:操作码字段,6位,最多可设计:26=64条指令。Rs、Rt:源操作数寄存器,5位,可选择25=32个寄存器。Rd:目的操作数寄存器,5位,可选择32个寄存器。Shant:立即数,5位,用于移位指令的移位值。Funct:功能码,6位,可指定指令的特定操作。031特点:MIPS机的所有运算与处理操作,都是在寄存器之间进行(RR型),∴执行速度很快。当需要访问存储器(取数/存数)时,则采用下面指令格式:6位5位5位16位opRsRtRS型(I型)常数或地址(Addres)031目的操作数(3)ARM机、pentium机指令格式

(见教材P120-121,略)1或20或10或10,1,2,40,1,2,4操作码ModReg或操作码R/M比例S变址I基址B位移量立即数2位3位3位2位3位3位

这种非固定长度的指令格式是典型的CICS结构特征。一是为了与它的前身80486保持兼容,二是希望能给编译程序的编制以更多灵活的编程支持。

Pentium机的指令字长度也是可变的:从1字节到12字节,还可以带前缀。指令格式如下所示:0或10或10或10或1(字节数)指令前缀段取代操作数长度取代地址长度取代(字节数)

指令的前缀是可选项,其作用是对其后的指令本身进行显示约定。每个前缀占1个字节。

指令前缀包括LOCK(锁定)前缀和重复前缀。LOCK前缀用于多CPU环境中对共享存储器的排他性访问。重复前缀用于字符串的重复操作,以获得比软件循环方法更快的速度。段取代前缀根据指令的定义和程序的上下文,一条指令所使用的段寄存器名称可以不出现在指令格式中,这称为段缺省规则。当要求一条指令不按缺省规则使用某个段寄存器时,必须以段取代前缀明确指明此段寄存器。

操作数长度取代前缀和地址长度取代前缀在实地址模式下,操作数和地址的默认长度是16位;在保护模式下,若D=1,操作数和地址的默认长度是32位,若D=0,二者的默认长度是16位。

指令本身由操作码字段、Mod-R/M字段、SIB字段、位移量字段、立即数字段组成。除操作码字段外,其他四个字段都是可选字段。

Mod-R/M字段:规定了存储器操作数的寻址方式,给出了寄存器操作数的寄存器地址号。

SIB字段:和Mod-R/M字段一起,对操作数来源进行完整的说明。

举例:

(教材P121)

[例1]

指令格式如下所示,其中OP为操作码,试分析该指令格式的特点。1597430OP--------源寄存器目标寄存器[解]:

(1)该指令为:单字长(16位)、二地址指令。

(2)操作码字段OP长度为7位,可以指定:27=128条指令。

(3)源寄存器Rs和目的寄存器Rt都是通用寄存器(各4位代码,可分别指定16个寄存器)。

(4)两个操作数均在寄存器中,所以属于RR型指令,其执行速度快。这种指令结构常用于快速处理或运算类指令。

Rs

Rt

[例2]

指令格式如下所示,其中OP为操作码,试分析指令格式的特点。1510987430OP

--------源寄存器变址寄存器位移量(16位)

[解]:

(1)机器字长16位;指令格式为:双字长、二地址指令;

(2)操作码字段OP为6位,可以指定26=

64种指令。

(3)一个操作数在源寄存器中(可以从24=16个寄存器中选择一个);另一个操作数在存储器中(由变址寄存器和位移量决定该数的内存地址),属于RS型指令。①②前面讨论已知:在指令字长固定的情况下,可以利用操作码扩展,有效地增加指令的条数。(见后例)[例]

:某16位机,指令操作码OP有6位,可采用操作码扩展法来分别构造单地址指令和零地址指令,设机器的单字长双地址指令格式如下:15109540OP

A1

A2试分析:该机器可以分别有多少条二地址指令、单地址指令和零地址指令?[解]:已知:在二地址指令格式中,操作码OP只有6位。二地址指令:OP=000000~111110(共26-1=63条);留出:OP=111111,作为单地址指令标志:单地址指令OP为:111111

00000~111111

11110

(25-1=31条)

留出:OP=111111

11111

,作为零地址指令标志:

零地址指令OP为:11111111111

00000~1111111111111111

(25=32条)A2也可扩充为操作码这时:A1可扩充为操作码;

A2作为单地址即可可见:

本例中,若采用操作码长度固定格式(6位),则最多只能产生26=64条指令;而采用操作码扩展法,则产生了(63+31+32)=126条指令。可见:在指令字长固定的情况下,采用操作码扩展的方法,可以得到更多的其它类型指令。15109540OP

A1

A24.3

操作数的类型

1、常规操作数类型包含四大类:(1)地址型数据A:A

是操作数的地址。(2)数值型数据D:D

直接表示操作数数值,其可以是定点数、浮点数、BCD码数等。(3)字符型数据:ASCII码数,用以表示文本或字符的数码。(4)逻辑性数据:用“1”、“0”表示逻辑性、状态性等特性的逻辑数据。

OP字段

操作数字段AD2、Pentium数据类型常数、整数、序数、压缩/未压缩BCD码数、浮点数等。

(见教材P122表4.6)3、PowerPC数据类型(见教材P123,自阅)PowerPC是一种32位RISC机器,能识别的数据类型包括:无符号字节、无符号半字、无符号字、无符号双字、有符号半字、有符号字、字符串、IEEE754格式浮点字等。可见:不同机器会有不同的数据类型约定。无符号数4.4

指令和数据的寻址方式

指令系统∴所谓寻址方式:形成指令或数据存储地址的方式。

无论是指令还是数据,一般都存放在存储器或寄存器中,要找到它们、并执行或处理它们,首先要把它们取到CPU中,→需要给出(或形成)存放它们的存储单元地址。DBUSCBUSABUSCPU存储器

指令或数据(存储单元)

指令或数据存储地址的概念:

设:某条指令(或操作数)存放在某存储单元中,则该存储单元的编号(地址),就是该指令(或操作数)的存储地址。[寻址方式]:形成指令(或操作数)“存储地址”的方式,称为

寻址方式。(由CPU根据要求自动完成)[寻址方式的类别]:(1)指令寻址方式:形成指令地址的方式。(2)数据寻址方式:形成操作数有效地址的方式。指令系统如何实现寻址?包括两种:(1)顺序寻址

(2)跳跃寻址1.

顺序寻址方式

特点:通常,CPU总是依次取出指令、顺序执行指令、直至完成程序。→

∴指令地址被依次顺序生成,指令的这种寻址方式称为“顺序寻址方式”。【实现方法】

通常采用程序计数器PC(又称;指令指针寄存器)即可,计数器PC可自动顺序地给出指令在内存中的地址。

(见后图)指令系统4.4.1

指令的寻址方式

由PC给出指令在内存中的地址。……

(指令的顺序寻址方式)2.跳跃寻址方式

当程序需跳出当前顺序,转到一个新地址运行时,指令的寻址则为:跳跃寻址方式。

所谓跳跃:是指下条指令的地址码,不是由程序计数器PC顺序地产生,而是通过执行当前指令、直接修改PC产生的新地址。

——修改后的PC会自动跟踪新的指令地址。

采用指令的跳跃寻址方式,可以实现程序转移或构成循环程序,从而有效缩短程序长度,或引用某些公共程序。

(如:指令系统中的各种条件转移或无条件转移指令)指令系统举例顺序:跳跃:新地址→PC(通过执行“转移指令”实现)LDA1000ADD1001DEC1200JMP

7

LDA2000SUB2001INCSTA2500LDA1100...0123456789PC+1指令地址寻址方式指令地址指令顺序寻址1顺序寻址2

顺序寻址3跳跃寻址7顺序寻址8指令寻址举例:(指令寻址方式演示)7(PC)+1→PC可见,在指令寻址方式中:

顺序寻址是由(程序计数器)PC

控制实现;

跳跃寻址则是由指令本身控制

实现。

?总体上:指令寻址方式主要为上述两种方式,简单明确,实现方便。4.4.2操作数寻址方式

[定义]:形成操作数的有效地址的方法,称为:操作数的

寻址方式。

以单地址指令为例:指令格式如下所示,其中用X、I、A各字段组成该指令的操作数地址字段。

注意:指令中操作数字段所给出的地址码,经常由形式地址A和寻址方式特征位X、I等组合形成。

指令系统形式地址

A变址

X

间址

I

操作码

OP

操作码字段操作数字段

一般来说:指令中所给出的地址码,常常只是一个形式地址A,并不是操作数真正的有效地址EA。

操作数的寻址过程:就是把形式地址A变换为操作数的有效地址EA的过程。指令系统

注意到:相对于指令寻址方式来说,数据寻址方式要丰富灵活得多。形式地址

A变址

X

间址

I

操作码

OP

操作码字段操作数字段定义有效地址EA

的形成方式A→EA1.隐含寻址

特点:在指令中不明显的给出操作数的地址。(将其地址隐含)

例如:单地址的汇编指令格式:

DIVBL

在指令的操作数字段中,没有指明第二操作数地址,通常约定为专用寄存器(如累加器AC),AC对单地址指令格式来说就是一个隐含地址。AXBL,商存AL中,余数存AH中。操作数的基本寻址方式:(见教材P124表4.7,9种)

OP

A2.

立即寻址

指令系统特点:

指令的地址字段A不是操作数的地址,而直接是操作数D本身,即:D=A。

这种方式中,由于指令中直接给出了操作数D,不需要通过访问内存去取数,因而,指令执行时间很短。OP(移位)F

AA例如:某单地址的移位指令格式为:

这里A不是地址,而是操作数D本身(D=A)。

F为标志位:当F=1:对操作数执行右移D位;当F=0:对操作数执行左移D位。OP(移位)F

A又例:指令MOVAX,#010H;操作:010HAX(寄存器)其中:010H就是一个立即可用的操作数,不需要访问内存去取。3.直接寻址

特点:

在指令格式的地址字段中,直接给出操作数的有效地址,即:EA=A

因此,在这种寻址方式中,形式地址A又称为直接地址。可以由寻址特征位I给予指示。(例如:I=0)

设:D表示操作数,那么直接寻址的逻辑表达式为:

EA=A

D=M(A)

操作码I

A寻址特征位ADI=0EA操作数D形式地址A就是有效地址EA:EA=A4.

间接寻址

特点:指令地址字段中的形式地址A不是操作数的有效地址EA,而是存放EA的内存单元M地址。

即:A单元的内容才是操作数的有效地址:EA=M(A)。

——可以由寻址特征位I给予指示。(例如:I=1)

∴如果把直接寻址和间接寻址结合起来,指令有如下形式:

寻址特征位:

I=0,表示直接寻址,有效地址:EA=A;

I=1,表示间接寻址,有效地址:EA=M(A)。

这时:操作数D=M(EA)=M((A))。指令系统操作码OPI

AEAEAADD

显然,间接寻址方式至少需要两次访存,才能取出操作数,会影响到指令执行速度。操作数DAI=1M(A)M(EA)5.

寄存器寻址方式和寄存器间接寻址方式

寄存器寻址方式:

当操作数不放在内存中,而是在CPU的通用寄存器中时,则可采用寄存器寻址方式。此时指令中操作数直接给出通用寄存器的编号Ri、Rj

即可。例如,指令:ADDR0,R1;

(R0)+(R1)

R0

(操作数在寄存器中)OPRi

Rj寄存器间接寻址方式:

指令格式中所指定的寄存器Ri中的内容不是操作数,而是操作数的存储地址。即:EA=M(Ri)。试问:这种方式所给出的操作数是在哪里?OPIRi

Rj在内存中!有效地址:EA=M(Ri)操作数:D=M(EA)=M((Ri))寻址特征位6.

相对寻址方式

特点:是把程序计数器PC的内容加上指令中给出的形式地址A,进而形成操作数的有效地址。

即:

EA=(PC)±A。

由于PC的内容是当前指令的地址,所以,“相对”寻址,就是指操作数地址相对于当前的指令地址而言。采用相对寻址方式的好处是操作数可以随着程序一起浮动。

此时,形式地址A称为“偏移量”,其值可正可负,相对于当前指令地址进行浮动。

OPIX

A寻址特征位EADEAD寻址特征位7.基址寻址(1)采用专用寄存器作基址寄存器RB,操作数的有效地址为:EA=(RB)+ARB

为基址寄存器OPA操作数D主存寻址特征位ALURB

可扩大寻址范围

有利于多道程序共享RB内容由操作系统或管理程序确定

在程序的执行过程中RB内容不变,形式地址A可变EAIXD+(2)采用通用寄存器Ri作基址寄存器操作数D主存寻址特征位ALUOPR0A指定R0

作基址寄存器

由用户指定某个通用寄存器Ri作为基址寄存器通用寄存器R0Rn-1R1…

基址寄存器的内容由操作系统确定

在程序的执行过程中(Ri

)内容不变,形式地址A可变EAIXD+指令系统特点:

这种寻址方式是将CPU中基址寄存器RB的内容与指令中给定的形式地址A相加,形成操作数的有效地址,

即:

EA=(RB)±A

主要优点:可以扩大寻址能力。与形式地址A相比,基址寄存器RB的位数可以设置得较长,从而可以在较大的存储空间中寻址。

∴基址寻址的主要目的是扩大寻址空间。

(演示)EA=(RX)+AOPA操作数主存寻址特征位ALURXRX

为变址寄存器(专用)

可有规律地调整操作数地址

便于处理数组问题RX

的内容由用户给定

在程序的执行过程中RX

内容可变,形式地址A不变通用寄存器R也可以指定为变址寄存器8.变址寻址方式

EAIXD+特点:

把CPU中定义的变址寄存器RX的内容与偏移量A相加,形成操作数的有效地址EA。

即:EA=(RX)±A

(可见,变址寻址方式与基址寻址方式计算有效地址的方法很相似)与基址寻址方式的区别:

变址寻址方式的目的是为了便于实现程序块的规律性移动或变化,而不是为了扩大寻址空间。指令系统见后例例:

设数据块内存首地址为A,求100个数的平均值直接寻址LDAA; (A)→Ac(累加器)ADDA+1; (A+1)+(Ac)→AcADDA+2;

(A+2)+(Ac)→Ac…ADDA+99;(A+99)+(Ac)→AcDIV#100;

(Ac)/100→AcSTAANS共用102条指令变址寻址CLR;0→AcLDX#0CPX#100BNELOPDIV#100STAANS仅用8条指令变址寄存器X清0M((X)+A)+(Ac)→Ac

(X)和#100比较(X)+1X(X)≠#100

跳转LOP:INX(Ac)/100→ACADDX,A教材P126,把相对寻址、基址寻址、变址寻址统称为“偏移寻址”。应当注意到:三种寻址方式中,尽管形成操作数地址的方法类似,但是各自的特点和实现目标是不相同的。9.段寻址方式

很多微型机中采用了段寻址方式,用于扩大寻址空间。例如:如何在16位机中形成20位的地址,从而获得1M存储空间的直接寻址能力?指令系统

[实现方法]:

1M空间的存储器需要20位地址;而16位地址只能寻址64K空间。→可以将1M空间分为24=16段,每段216=64K空间。在段寻址时,由段寄存器给出一个基地址(段号),再加上一个16位偏移量,来形成实际的20位物理地址。

在形成20位物理地址时,将段寄存器中的16位数左移4位,然后以16位偏移量相加,即可形成所需的20位的内存地址。(教材P127)可见,这种寻址方式的实质还是基址寻址。

(演示)

+10、堆栈寻址

堆栈:是能方便存储和取出数据的一组地址连续的暂存单元。这些暂存单元既可以是寄存器组,也可以是存储器。∴计算机中常用两种形式的堆栈:

(1)寄存器堆栈(2)存储器堆栈。堆栈和其它形式存储器的区别:对数据的存取方法或寻址方法有所不同。→堆栈采用“先进后出”的存取管理方法,通过堆栈指针寄存器SP来实现管理。堆栈中:所有的数据进栈或出栈都是通过栈顶单元来完成。

∴堆栈寻址时,地址指针SP总指向栈顶单元:EA=(SP)。

通常:CPU通过“进栈”指令(PUSH)把数据存入堆栈;而通过“出栈”指令(POP)把数据从堆栈中取出(弹出)。

由于计算机中的寄存器资源有限,无法适应批量数据的暂存任务。∴当需要一定规模的堆栈时,程序员通常在主存储器中设置一部分区域来作为堆栈,这是堆栈的一种主要形式:存储器堆栈。

堆栈通常有“进栈PUSH”、“出栈POP”两种操作,按照“先进后出”的原则进行存取操作。

见CAI演示注:

当主存储器的一部分单元被用作堆栈区后,这一部分就不能用作其它用途。小结:

与指令的寻址方式相比较,操作数的寻址方式要丰富、灵活很多。操作数寻址方式的重点:操作数有效地址EA的形成方法寻址空间大小的确定(取决于什么?)

各寻址方式的特点。举例分析练习:假设(R)=1000,M(1000)=2000,M(2000)=3000,(PC)=4000,问在以下寻址方式下,访问到的操作数D各为何值?

(1)寄存器寻址R; (2)寄存器间接寻址M(R),(3)直接寻址A=1000; (4)间接寻址A=1000

(5)相对寻址A=-2000; (6)立即数寻址A=2000[解]:

(1)

EA=RD=(R)=1000;寄存器的内容就是操作数

(2)EA=(R)=1000,D=M((R))=M(1000)=2000;

(3)EA=A=1000,D=M(1000)=2000; (4)EA=M(A)=M(1000)=2000,D=M(2000)=3000;

(5)EA=(PC)+A=4000-2000=2000,D=M(2000)=3000; (6)D=A=2000;A本身就是操作数4.4.3寻址方式设计举例

(见Pentium机寻址)

1.PDP/11系列机寻址方式

PDP/11系列机指令字长为16位。虽然指令系统中有单操作数指令和双操作数指令,但操作数字段(即地址部分)均由6位二进制构成。例如,其二地址指令格式如下:151211109876543210操作码寻址方式寄存器号寻址方式寄存器号源地址目标地址PDP/11计算机CPU中有8个程序可访问的寄存器(R0-R7)。其中:R7作为程序计数器PC使用,R6作为堆栈指示器SP使用,而其它6个寄存器R0-R5可作为通用寄存器。因此,用指令中的3位指定寄存器号。

指令中有3位用于寻址方式选择,可指定8种寻址方式。此外还有4种指令计数器型寻址方式属于隐含寻址方式,它们以访问R7(程序计数器PC)为标志。所以,操作数共有12种寻址方式。(6位)(6位)(当应用R7寄存器寻址时,为4种指令计数器型寻址方式)R7用作PC寻址名称

寻址特征值有效地址E汇编格式说明程序计数器型

立即型010(PC)+2→PC;

E=(PC)#n指令下一个单元内容是操作数的地址绝对值011(PC)+2→PC;

E=((PC))@#A指令下一个单元内容是操作数的地址相对型110(PC)+2→PC;E=((PC))+(PC)+2;A指令下一个单元内容与指令地址加4的数相加,其和作为操作数的地址

相对间接型111(PC)+2→PC;E=(((PC))+(PC)+2)@A指令下一个单元内容与指令地址加4的数相加,其和作为操作数地址的地址可以看出:

PDP/11寻址方式的特征是采用寄存器进行寻址。当在寄存器R7中寻址时,变为四种隐含的指令计数器PC寻址方式。

指令系统1、Pentium的寻址方式:

Pentium的外部地址总线宽度是36位,但它也支持32位物理地址空间(4G)。在实地址模式下,逻辑地址形式为段寻址方式:将段名所指定的段寄存器内容(16位)左移4位(低4位补0),得到20位段基地址,再加上16位段内偏移,即得20位物理地址,可寻址1M的实地址空间。在保护模式下,32位段基地址加上段内偏移,得到32位线性地址LA。由存储管理部件将其转换成32位的物理地址,最大可寻址4G的空间。指令系统序号寻址方式名称有效地址EA算法说明(1)立即操作数=A操作数在指令中(2)寄存器EA=R操作数在寄存器中,指令给出寄存器号(3)直接EA=AA为偏移量(4)基址EA=(RB)RB为基址寄存器(5)基址+偏移量EA=(RB)+A基址寻址(6)比例变址+偏移量EA=(RI)×S+A

RI为变址寄存器S=1,2,4,8为比例因子(7)基址+变址+偏移EA=(RB)+(RI)+AA可有可无(8)基址+比例变址+偏移量EA=(RB)+(RI)×S+AA可有可无(9)相对EA=(PC)+APC为程序计数器或当前指令指针寄存器Pentium机的寻址方式(见教材P128图4.4和表4.8)对32位寻址方式作几点说明:(自阅)

⑴立即数可以是8位,16位,32位。

⑵寄存器地址:一般指令或使用8位通用寄存器,或使用16位通用寄存器,或使用32位通用寄存器。对64位浮点数操作,要使用一对32位寄存器。少数指令以段寄存器来实施寄存器寻址方式。

⑶直接寻址:也称偏移量寻址方式,偏移量长度可以是8位,16位,32位。

⑷基址寻址:基址寄存器B可以是上述通用寄存器中任何一个。基址寄存器B的内容为有效地址。

⑸基址+偏移量寻址:基址寄存器B是32位通用寄存器中任何一个。

⑹比例地址+偏移量寻址:也称为变址寻址方式,变址寄存器I是32位通用寄存器中除ESP外的任何一个,而且可将此变址寄存器内容乘以1,2,4或8的比例因子S,然后再加上偏移量而得到有效地址。

⑺,⑻两种寻址方式是⑷,⑹两种寻址方式的组合,此时偏移量可有可无。

⑼相对寻址:适用于转移控制类指令。用当前指令指针寄存器EIP或IP的内容(下一条指令地址)加上一个有符号的偏移量,形成CS段的段内偏移。指令系统2、PowerPC的寻址方式:(自阅)指令格式分析与设计举例[例4]某二地址、RS型指令的结构如下所示:

(书P129)

其中:I为间接寻址标志位,X为寻址模式字段,D位偏移量字段(形式地址)。通过I、X、D的组合,可构成下表所示的寻址方式。请写出六种寻址方式的名称。(第二个操作数)

2位X存储器操作数

寄存器操作数

偏移量DI通用寄存器------OP16位

1位4位6位

设R1为基址寄存器EA=(R1)±D110(6)EA=(D)001(5)EA=(R3)111(4)设R2为变址寄存器EA=(R2)±D100(3)PC为程序计数器EA=(PC)±D010(2)EA=D000(1)说明有效地址EAXI寻址方式直接寻址

相对寻址

变址寻址

寄存器间接寻址间接寻址基址寻址2位X存储器操作数

寄存器操作数

偏移量DI通用寄存器------OP16位

1位4位6位【例】习题8(教材P137):指令格式设计与分析

某机器字长32位,主存容量为1MB,单字长指令,有50种操作码,采用寄存器寻址、寄存器间接寻址、立即、直接等寻址方式。CPU中有PC,IR,AR,DR和16个通用寄存器。问:(1)指令格式如何安排?写出EA,指出寻址空间的大小。(2)能否增加其它寻址方式?解:(1)指令格式设计单字长指令→∴指令字长为32位有50条指令,→至少OP=6位

16个通用寄存器∴寄存器操作数为4位。

4种寻址方式:寄存器寻址、寄存器间接寻址

立即寻址、直接寻址→寻址特征位IX至少为2位。312625242320190OPIXRiA(6位)(2位)(4位)(20位)∴指令格式(32位):设: IX=00:寄存器寻址→操作数D=(Ri)

IX=10:寄存器间接寻址→EA=(Ri),D=(EA) IX=01:立即寻址→D=A(或D=A+Ri×220)

IX=11:直接寻址→EA=A,(或EA=A+Ri×220)各寻址方式下,寻址空间大小各为多少?……(EA)312625242320190OPIXRiA(6位)(2位)(4位)(20位)(24位)(2)还能否增加其它的寻址方式?

不能!寻址特征位IX已用满。当然,可以重新设计指令格式,增加寻址特征位来增加寻址方式。

[例]

某16位机器所使用的指令格式如下所示,该机有两个20位基址寄存器,四个16位变址寄存器,十六个16位通用寄存器。指令汇编格式中的S(源),D(目标)都是通用寄存器,M是主存中的一个单元。(教材P118-119)

三种指令的操作码OP分别是:MOV=(0A)H

,STA=(1B)H

,LDA=(3C)H。

MOV是传送指令,STA为写数指令,LDA为读数指令。指令格式如下:S、D都是寄存器操作数M是存储器操作数要求:

⑴分析三种指令的指令格式与寻址方式特点。⑵CPU完成哪一种操作所花时间最短?哪一种操作所花时间最长?第二种指令的执行时间有时会等于第三种指令的执行时间吗?⑶下列情况下每个十六进制指令字分别代表什么操作?其中如果有编码不正确,如何改正才能成为合法指令?

①(F0F1)H(3CD2)H②(2856)H

③(6FD6)H④(1C2)H指令系统

第一种指令(MOVS,D):单字长、二地址指令,RR型;

②第二种指令(STAS,M):双字长、二地址指令,RS型,其中,S采用基址寻址或变址寻址,R由源寄存器决定;③第三种指令(LDAS,M):双字长、二地址指令,RS型,其中,R由目标寄存器决定,S由20位地址(直接寻址)决定。⑴分析三种指令的指令格式与寻址方式特点。√√√处理机完成第一种指令所花时间最短,因为是RR型指令,执行时不需要访问存储器。。⑵

∴结论为:第一条指令执行速度最快;(RR型) 第三条指令速度次之;(RS型) 第二条指令执行速度最慢。(RS型)并且:第二条指令的执行速度一定比第三条指令慢。

第三种指令在执行时也要访问存储器,但由于指令直接给出了存储器操作数的有效地址,因而节省了求有效地址运算的时间开销。所以第三种指令的执行时间要比第二种指令快。第二种指令是RS型指令,指令执行时需要访问存储器,同时要进行寻址方式的变换运算(基址或变址),这也需要时间。

⑶根据已知条件:MOV:(OP)=(0A)H=001010,STA:(OP)=(1B)H

=011011,LDA:(OP)=(3C)H

=111100

分析各指令的二进制代码并进行格式分析和检查:

①(F0F1)H(3CD2)H(双字长指令)

=111100001111

00010011110011010010OP=3CH(LDA指令)20位地址=13CD2H

对照指令格式,可知其含义是:把主存(13CD2)H

地址单元的内容取至15号寄存器中。

∴由前6位操作码OP=(3C)H

,可知这是LDA(取数)指令,操作码编码正确。目标寄存器号=0FH√

指令系统

②(2856)H=001010000101

0110

显然:这是一条单字长,只可能是MOV指令。验证操作码(前6位):OP=(0A)H,可知操作码编码正确。目标寄存器号=05HOP=0AH源寄存器号=06H对照指令格式,该指令的功能是:把06号源寄存器的内容传送至05号目标寄存器。检查操作码OP:③(6FD6)H=110011111101

0110

这也是一条单字长指令,一定是MOV指令OP=(0A)H。可知:操作码编码错误!OP=33H目标寄存器号=0DH源寄存器号=06H∴应当改正为:001010111101

0110=(2BD6)H

OP=0AH其含义是:把06号源寄存器的内容→至0D号目标寄存器中。

指令系统

④(1C2)H=0000000111000010

是单字长指令,也代表MOV指令,但操作码OP显然错误!

OP=00H目标寄存器号=0CH源寄存器号=02H可改正为:0010100111000010=(29C2)H

其含义是:把02号源寄存器的内容→至0C号目标寄存器。OP=0AH堆栈寻址方式(略)4.4.1

串联堆栈4.4.2

存储器堆栈

指令系统

堆栈:是一组能方便存储和取出数据的暂存单元。这些暂存单元既可以是存储器,也可以是寄存器。堆栈和其它形式存储器的差别:

堆栈对数据的存取方法或寻址方法有所不同。计算机中常用两种形式的堆栈:

(1)串联堆栈(2)存储器堆栈。4.4.1串联堆栈串联堆栈(又称作:寄存器堆栈):

一些计算机的CPU中有一组专门用作堆栈的寄存器,有16个或更多,它们称为串联堆栈,其中每一个寄存器都能保存一个数据字。

当由于某种原因,需要空出某个通用寄存器时,就可将该通用寄存器内容先暂存入堆栈。以后若需要这部分数据时,又可以从堆栈中取回来。由于串联堆栈的操作主要在寄存器之间进行,所以,操作的速度较快。

(CAI演示)

指令系统

由CAI可以看出,在串联堆栈中:所有的数据传送是在栈顶和某个通用寄存器之间进行的,即:通用寄存器仅和堆栈的顶部单元相联系,且栈顶单元是固定的。通常,CPU通过“进栈”指令把数据送入堆栈,而通过“出栈”指令把数据从堆栈中取出。这种结构通常称作“下压堆栈”或“串联堆栈”。指令系统堆栈特点:

每当一个新数被压进栈顶时,数据是串联地依次向下压进堆栈;所以,数据出栈时,最后进入栈的数总是首先从栈中取出。因此,这种结构通常又称为“后进先出”(或“先进后出”)堆栈。[串联堆栈存在的问题]:指令系统

1、计算机中可用于堆栈的寄存器数目一般是有限的。如堆栈有8个寄存器,那么把多于8个的数据压入堆栈时,最下面的数据就从栈底漏出并被丢失。

2、串联堆栈的读出是破坏性的。即:当从堆栈取出一个数时,它原来在堆栈寄存器单元中的内容将被其它内容所覆盖,所以,原内容将不存在。

∴当需要一定规模的堆栈时,程序员通常在主存储器中设置一部分区域来作为堆栈,所以有堆栈的另一种形式:存储器堆栈。4.4.2存储器堆栈[存储器堆栈的优点]:指令系统

⑴堆栈的长度可以任意设定;[存储器堆栈的管理方法]:“栈顶浮动”

存储器堆栈的“进栈”,“出栈”操作见CAI演示:⑶可以用访存指令对堆栈中的数据进行直接访问。⑵堆栈的个数可以随意设定;

设置堆栈指示器SP,它是CPU中一个专用的寄存器。SP指定的存储器单元,总是堆栈的栈顶单元。注:

当主存储器的一部分单元被用作堆栈区后,这一部分就不能用作其它用途。

当建立存储器堆栈时,可用程序来设置。把一个主存地址送入堆栈指示器SP,就可确定堆栈的栈顶。在存储器堆栈中,数据的压入或取出操作,通常也是使用“进栈”指令和“出栈”指令来实现的,但是指令的功能和串联堆栈中的情况有所不同。

指令系统(1)进栈操作可描述如下:

(A)→Msp

,(SP)-1→SP其中(A)表示通用寄存器A的内容,SP表示堆栈指示器,Msp

则表示存储器堆栈的栈顶单元。SP=(300)8SPaSP=(277)8SPaa(数据进栈)指令系统aSPSP=(277)8(2)出栈操作描述如下:

(SP)+1→SP,(Msp)→A

SPSP=(300)8aa(数据出栈)注意到:

在此例存储器堆栈中,进栈时,先存入数据,然后修改堆栈指示器SP;出栈时,先修改堆栈指示器SP,然后取出数据。

SP的初始值为堆栈区域的最高地址,同时SP总指向下一个要进栈数据的存储单元。进栈时,SP的调整为递减;出栈时,SP的调整为递增。指令系统课后思考:

若建立存储器堆栈时,堆栈区域的最低地址送入堆栈指示器SP,且SP总指向刚进栈的最新数据的存储单元时,存储器的进栈和出栈过程如何描述?4.5

典型指令4.5.1

指令的分类4.5.2

基本指令系统4.5.3

精简指令系统指令系统4.5.1指令的分类

基本完善系统的指令类别1.数据传送指令

(教材P130~131)

数据传送指令主要包括:取数指令、存数指令、传送指令、成组传送指令、字节交换指令、清累加器指令、堆栈操作指令等等。这类指令特点:主要用来实现主存和寄存器之间,或寄存器和寄存器之间的数据传送。指令系统2.算术运算指令

这类指令包括:二进制定点加、减、乘、除指令,浮点加、减、乘、除指令,求反、求补指令,算术移位指令,算术比较指令,十进制加、减运算指令等。这类指令主要用于机器数的算术运算,大型机中有向量运算指令等。指令系统3.逻辑运算指令

这类指令包括:逻辑加、逻辑乘、按位加、逻辑移位等指令,主要用于无符号数的位操作、代码的转换、判断及运算。移位指令用来对寄存器的内容实现左右移动,包括:算术移位、逻辑移位、循环移位等。指令系统4.程序控制指令

也称转移指令。根据不同测试结果执行转移,从而改变程序原来执行的顺序,这种转移指令称为“条件转移指令”。

另外,还有无条件转移指令、转子程序指令、返回主程序指令、中断返回指令等指令。转移指令的转移地址一般采用直接寻址(绝对转移)和相对寻址(相对转移)方式来确定。5.输入输出(I/O)指令

I/O指令主要用来控制外设工作,包括:启动外围设备、检查测试外设的工作状态、实现外设和CPU之间、或外设与外设之间的信息传送等。

指令系统INAX,nOUTDX,ALOUTn,AXOUTDX,AXINAL,DXINAX,DXI/O输入端口

温馨提示

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

评论

0/150

提交评论