已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与技术专业 计算机组成原理 武汉科技大学 计算机科学与技术学院 第四章 指令系统 n本章内容 4.1 指令系统的发展和性能要求 4.2 指令格式 4.3 指令和数据的寻址方式 4.4 堆栈寻址方式 4.5 典型指令 4.1.1 指令系统的发展 1. 计算机的程序:是解决某一实际问题的指令序列; 2. 指令:就是要计算机执行某种操作的命令。 从计算机组成的层次结构来说,计算机的指令有微指令、机 器指令和宏指令之分。 微指令:微程序级的命令,它属于硬件; 宏指令:由若干条机器指令组成的软件指令,它属于软件; 机器指令(指令):介于微指令与宏指令之间,每条指令可完 成一个独立的算术运算或逻辑运算。 3. 指令系统:一台计算机中所有机器指令的集合,它是表征一台计 算机性能的重要因素,其格式与功能不仅直接影响到机器的硬 件结构也直接影响到系统软件,影响到机器的适用范围。 4.1 指令系统的发展和性能要求 4. 指令系统的发展 50年代:指令系统只有定点加减、逻辑运算、数据传送、转移 等十几至几十条指令。 60年代后期:增加了乘除运算、浮点运算、十进制运算、字符 串处理等指令,指令数目多达一二百条,寻址方式也趋多样化。 60年代后期开始出现系列计算机(指基本指令系统相同、基本体 系结构相同的一系列计算机)一个系列往往有多种型号,它们在结构 和性能上有所差异。同一系列的各机种有共同的指令集而且新推出 的机种指令系统一定包含所有旧机种的全部指令,旧机种上运行的各 种软件可以不加任何修改便可在新机种上运行,大大减少了软件开 发费用。 70年代末期:大多数计算机的指令系统多达几百条。我们称这些 计算机为复杂指令系统计算机(CISC)。 但是如此庞大的指令系统难以保证正确性,不易调试维护,造成 硬件资源浪费。为此人们又提出了便于VLSI技术实现的精简指令系 统计算机(RISC)。 一个完善的指令系统应满足如下四方面的要求: 1. 完备性 用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而 不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便。 2. 有效性 利用该指令系统所编写的程序能够高效率的运行。高效率主要表现在 程序占据存储空间小、执行速度快。一般来说,一个功能更强、更完善的指 令系统,必定有更好的有效性。 3. 规整性 规整性包括指令系统的对称性、匀齐性、指令格式和数据格式的一 致性。 对称性指在指令系统中所有的寄存器和存储器单元都可同等对待,所有的指 令都可使用各种寻址方式; 匀齐性是指一种操作性质的指令可以支持各种数据类型; 指令格式和数据格式的一致性是指指令长度和数据长度有一定的关系,以方 便处理和存取。 4. 兼容性 系列机各机种之间具有相同的基本结构和共同的基本指令集,因而 指令系统是兼容的,即各机种上基本软件可以通用。但由于不同机种推出的 时间不同,在结构和性能上有差异,做到所有软件都完全兼容是不可能的, 只能做到“向上兼容”,即低档机上运行的软件可以在高档机上运行。 4.1.2 对指令系统性能的要求 计算机语言具有高级语言和低级语言之分。 高级语言如C,FORTRAN等,其语句和用法与具体机器的指令 系统无关。 低级语言分机器语言(二进制语言)和汇编语言(符号语言), 这两种语言都是面向机器的语言,和具体机器的指令系统密切相关 。机器语言用指令代码编写程序,而符号语言用指令助记符来编写 程序。 高级语言与低级语言的性能比较 4.1.3 低级语言与硬件结构的关系 高级语言与低级语言的性能比较 计算机能够直接识别和执行的唯一语言是二进制语言,但人们 采用符号语言或高级语言编写程序。为此,必须借助汇编程序或编 译程序,把符号语言或高级语言翻译成二进制码组成的机器语言。 汇编语言依赖于计算机的硬件结构和指令系统。不同的机器有 不同的指令,所以用汇编语言编写的程序不能在其他类型的机器上 运行。 高级语言与计算机的硬件结构及指令系统无关,在编写程序方 面比汇编语言优越。但是高级语言程序“看不见”机器的硬件结构, 不能用于编写直接访问机器硬件资源的系统软件或设备控制软件。 为此,一些高级语言提供了与汇编语言之间的调用接口。用汇编语 言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈 来传递参数或参数的地址。 4.2 指令格式 指令字(简称指令)即表示一条指令的机器字。 指令格式则是指令字用二进制代码表示的结构形式,由 操作码字段和地址码字段组成。 操作码字段 地址码字段 操作码字段表征指令的操作特性与功能; 操作码字段的位数取决于指令系统的规模,有固定位 数和可变位数; 若操作码字段的位数固定为n位,则指令系统最多可表 示2n条指令。 4.2.1 操作码 指令系统的每一条指令都有一个操作码,它表示该指令应进行 什么性质的操作。 不同的指令用操作码字段的不同编码来表示,每一种编码代表 一种指令。 组成操作码字段的位数一般取决于计算机指令系统的规模。例 如,一个指令系统只有8条指令,则有3位操作码就够;如果有32条 指令,那么就需要5位操作码。 对于一个机器的指令系统,在指令字中操作码字段和地址码字 段长度通常是固定的。 在单片机中,由于指令字较短,为了充分利用指令字长度,指 令字的操作码字段和地址码字段是不固定的,即不同类型的指令有 不同的划分,以便尽可能用较短的指令字长来表示越来越多的操作 种类,并在越来越大的存储空间中寻址。 地址码字段通常指定参与操作的操作数的地址或操作数本身。 根据一条指令中有几个操作数地址,可将该指令称为几操作数 指令或几地址指令。 一般的操作数有被操作数、操作数及操作结果这三种数,因而 就形成了三地址指令格式。在此基础上,后来又发展成二地址格式 、一地址格式和零地址格式 操作码码 1 2 3 操作码码 1 2 操作码码 1 操作码码 4.2.2 地址码 注意 (1)零地址指令的指令字中只有操作码,而没有地址码。 这种指令有两种情况: 一是该指令不需要操作数,如空操作指令NOP; 二是该指令隐含一个操作数位于累加器AC中。如十进制修正 指令DAA。 (2)一地址指令常称为单操作数指令。 这种指令也有两种情况: 一是指令本身只需要一个操作数,如求反指令NOT; 二是虽然需要两个操作数,但指令以运算器中累加寄存器AC 中的数据为被操作数,指令字的地址码字段所指明的数为操作数, 操作结果又放回累加寄存器AC中。 (AC) OP (A) - AC OP表示操作性质;(AC)表示累加寄存器AC中的数;(A) 表示内存中地址为A的存储单元中的数或运算器中地址为A的通用 寄存器中的数; -表示把操作(运算)结果传送到指定的地方。 (3)二地址指令常称为双操作数指令,它的两个地址码字段分别指明参与操作的 两个数在内存中或运算器中通用寄存器的地址,A1作存放操作结果的地址 。 (A1) OP (A2) - A1 (4)三地址指令字中有三个操作数地址。 (A1) OP (A2) - A3 A1为被操作数地址,也称源操作数地址; A2为操作数地址,也称终点操 作数地址; A3为存放结果的地址。 同样,A1,A2,A3可以是内存中的单 元地址,也可以是运算器中通用寄存器的地址。 二地址指令格式中,从操作数的物理位置来说,又可归结为三种类型。 1. 存储器-存储器(SS)型指令 2. 寄存器-寄存器(RR)型指令: 3. 寄存器-存储器(RS)型指令: 指令字长度:一个指令字中包含二进制代码的位数。有等 长和变长两种。 等长指令的处理结构简单,在对于操作码字段位数可变的 情况下,利用地址码的个数不同,可将操作码向地址码部分延 伸,从而增加指令条数。 机器字长:计算机能直接处理的二进制数据的位数,它决 定了计算机的运算精度。 4.2.3 指令字长度 其中: L为指令字长度, N为机器字长度 使用多字长指令,目的在于提供足够的地址位来解决访问内存 任何单元的寻址问题。其主要缺点是必须两次或多次访问内存以取 出一整条指令,降低了CPU的运算速度,又占用了更多的存储空间 。 等长指令字结构:各种指令字长度是相等的。这种指令字结构简单, 且指令字长度是不变的。 变长指令字结构:各种指令字长度随指令功能而异。结构灵活,能充 分利用指令长度,但指令的控制较复杂。 由于硬件只能识别1和0,所以采用二进制操作码是必要的,但 是我们用二进制来书写程序却非常麻烦。 为了便于书写和阅读程序,每条指令通常用3个或4个英文缩写 字母来表示。这种缩写码叫做指令助记符。 表4.2 典型的指令助记符 典 型 指 令 指令助记记符 二进进制操作 码码 加 法 ADD 001 减 法 SUB 010 传传 送 MOV 011 跳 转转 JMP 100 转转 子 JSR 101 存 储储 STR 110 读读 数 LDA 111 4.2.4 指令助记符 如上表所示,这里我们假定指令系统只有7条指令,所 以操作码只需3位二进制。 由于指令助记符提示了每条指令 的意义,因此比较容易记忆,书写起来比较方便,阅读程 序容易理解。 需要注意的是,在不同的计算机中,指令助记符的规 定是不一样的。因此,指令助记符还必须转换成与它们相 对应的二进制码。这种转换借助汇编程序可以自动完成, 汇编程序相当于一个“翻译”。 1. 八位微型计算机的指令格式 8位微型机字长只有8位,指令结构是一种可变字长形式,包含 单字长、双字长、三字长指令等多种。 操作码码 操作码码 1 2 操作码码 1 单字长指令 双字长指令 三字长指令 内存按字节编址,所以单字长指令每执行一条指令后,指令地 址加。双字长指令或三字长指令每执行一条指令时,指令地址要 加2或加3,可见多字长的指令格式不利于提高机器速度。 4.2.5 指令格式举例 2. PDP/11系列机指令格式 PDP/11系列机指令字长16位,其指令格式如下表所示。 表4.3 PDP/11系列机指令格式 从表中看出,在PDP/11中,操作码字段是不固定的,其长度也是 不相同的。这样做可以扩展操作码以包含较多的指令。但是操作 码字段不固定,对控制器的设计来说必将复杂化。 3. pentium指令格式 pentium机的指令字长度是可变的:从字节到12字节,还可 以带前缀,指令格式如下所示。 0或1 0或1 0或1 0或1(字节数) 指令前缀 段取代 操作数长度取代 地址长度取代 1或2 0或1 0或1 0,1,2,4 0,1,2,4(字节数 ) 操作 码码 ModReg或 操作码码 R/ M 比 例S 变变 址I 基 址B 位移量立即数 2位 3位 3位 2位 3位 3位 这种非固定长度的指令格式是典型的CICS结构特征。一是为 了与它的前身80486保持兼容,二是希望能给编译程序写作者以更 多灵活的编程支持。 指令的前缀是可选项,其作用是对其后的指令本身进行显示约 定。每个前缀占个字节。 指令前缀 包括LOCK(锁定)前缀和重复前缀。LOCK前缀用 于多CPU环境中对共享存储器的排他性访问。重复前缀用于字符串 的重复操作,以获得比软件循环方法更快的速度。 段取代前缀 根据指令的定义和程序的上下文,一条指令所使用的 段寄存器名称可以不出现在指令格式中,这称为段缺省规则。当要 求一条指令不按缺省规则使用某个段寄存器时,必须以段取代前缀 明确指明此段寄存器。 操作数长度取代前缀和地址长度取代前缀 在实地址模式下,操作 数和地址的默认长度是16位;在保护模式下,若D1,操作数和地 址的默认长度是32位,若D0,二者的默认长度是16位。 指令本身由操作码字段、Mod-R/M字段、SIB字段、位移量字 段、立即数字段组成。除操作码字段外,其他四个字段都是可选字 段。 Mod-R/M字段:规定了存储器操作数的寻址方式,给出了寄存器操 作数的寄存器地址号。 SIB字段:和Mod-R/M字段一起,对操作数来源进行完整的说明。 例1 指令格式如下所示,其中OP为操作码,试分析指令格式的 特点。 15 9 8 7 4 3 0 解: (1)单字长二地址指令。 (2)操作码字段OP可以指定128条指令。 (3)源寄存器和目标寄存器都是通用寄存器(可分别指定16个), 所以是RR型指令,两个操作数均在寄存器中。 (4)这种指令结构常用于算术逻辑运算类指令。 op源寄存器目标标寄存器 例2 指令格式如下所示,OP为操作码字段,试分析指令格式特点 解: (1)双字长二地址指令,用于访问存储器。 (2)操作码字段OP为6位,可以指定64种操作。 (3)一个操作数在源寄存器(共16个),另一个操作数在存储器 中(由变址寄存器和位移量决定)所以是RS型指令。 op 源寄存器变变址寄存器 位移量(16位) 15 10 7 4 3 0 4.3 指令和数据的寻址方式 操作数或指令在存储器中的地址:某个操作数或某条指令 存放在某个存储单元时其存储单元的编号。 在存储器中,操作数或指令字写入或读出的方式,有地址 指定方式、相联存储方式和堆栈存取方式。 当采用地址指定方式时,形成操作数或指令地址的方式, 称为寻址方式。 寻址方式分为两类,既指令寻址方式和数据寻址方式,前 者比较简单,后者比较复杂。 4.3.1 指令的寻址方式 指令的寻址方式有两种:一种是顺序寻址方式; 另一种是跳跃寻址方式。 1. 顺序寻址方式 (PC)1 PC 指令地址在内存中按顺序安排,当执行一 段程序时,通常是一条指令接一条指令的顺序执 行。 从存储器取出第一条指令,然后执行这条 指令;接着从存储器取出第二条指令,在执行第 二条指令;接着再取出第三条指令这种程序 顺序执行的过程,我们称为指令的顺序寻址方式 。 为此,必须使用程序计数器(又称指令指 针寄存器)PC来计数指令的顺序号,该顺序号就 是指令在内存中的地址。 2. 跳跃寻址方式 目标地址PC 当程序转移执行的顺序时,指令的寻址就采取跳 跃寻址方式。 所谓跳跃,是指下条指令的地址码不是由程序计 数器给出,而是由本条指令给出。 程序跳跃后,按新的指令地址开始顺序执行。指 令计数器的内容也必须相应改变,以便及时跟踪新的 指令地址。 采用指令跳跃寻址方式,可以实现程序转移或构 成循环程序,从而能缩短程序长度,或将某些程序作 为公共程序引用。指令系统中的各种条件转移或无条 件转移指令,就是为了实现指令的跳跃寻址而设置的 。 形成操作数的有效地址的方法,称为操作数的寻址方式。 例如,一种单地址指令的结构如下所示,其中用X,I,D各字 段组成该指令的操作数地址。 操作码OP 变址X 间址I 形式地址D 指令中操作数字段的地址码是由形式地址和寻址方式特征位等 组合形成,因此,一般来说,指令中所给出的地址码,并不是操作 数的有效地址。 因此,寻址过程就是把操作数的形式地址,变换为操作数的有 效地址的过程。 4.3.2 操作数寻址方式 1. 隐含寻址 在指令中不明显的给出而是隐含着操作数的地址。例如,单地 址的指令格式,没有在地址字段中指明第二操作数地址,而是规定 累加寄存器AC作为第二操作数地址,AC对单地址指令格式来说是 隐含地址。 2. 立即寻址 指令的地址字段指出的不是操作数的地址,而是操作数本身。 这种方式的特点是指令执行时间很短,不需要访问内存取数。 例如:单地址的移位指令格式为 OP(移位) F D 这里D不是地址,而是一个操作数。F为标志位,当F1,操 作数进行右移;当F0时,操作数进行左移。 3. 直接寻址 直接寻址特点是:在指令格式的地址字段中直接指出操作数 在内存的地址D。 采用直接寻址方式时,指令字中的形式地址D就是操作数的 有效地址E,既ED。因此通常把形式地址D又称为直接地址。 此时,由寻址模式给予指示。 如果用S表示操作数,那么直接寻 址的逻辑表达式为 S(E)(D) 4. 间接寻址 间接寻址的情况下,指令地址字段中的形式地址D不是操 作数的真正地址,而是操作数地址的指示器,D单元的内容才 是操作数的有效地址。 如果把直接寻址和间接寻址结合起来,指令有如下形式: 操作码 I D 寻址特征位I0,表示直接寻址,这时有效地址ED; I1,表示间接寻址,这时有效地址E(D) 。 间接寻址方式是早期计算机中经常采用的方式,但由于两 次访存,影响指令执行速度,现在已不大使用。 5. 寄存器寻址方式和寄存器间接寻址方式 当操作数不放在内存中,而是放在CPU的通用寄存器中时 ,可采用寄存器寻址方式。此时指令中给出的操作数地址不是 内存的地址单元号,而是通用寄存器的编号。 寄存器间接寻址方式与寄存器寻址方式的区别在于:指令 格式中的寄存器内容不是操作数,而是操作数的地址,该地址 指明的操作数在内存中 6. 相对寻址方式 相对寻址是把程序计数器PC的内容加上指令格式中的形式地址 D而形成操作数的有效地址。程序计数器的内容就是当前指令的地 址。“相对”寻址,就是相对于当前的指令地址而言。 采用相对寻址方式的好处是程序员无须用指令的绝对地址编程 ,所编程序可以放在内存任何地方。 此时形式地址D通常称为偏移量,其值可正可负,相对于当前 指令地址进行浮动。 7. 基址寻址方式 基址寻址方式是将CPU中基址寄存器的内容加上指令格式中的 形式地址而形成操作数的有效地址。 它的优点是可以扩大寻址能力。同形式地址相比,基址寄存器 的位数可以设置得很长,从而可以在较大的存储空间中寻址。 8. 变址寻址方式 变址寻址方式与基址寻址方式计算有效地址的方法很相似,它 把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效 地址。 但使用变址寻址方式的目的不在于扩大寻址空间,而在于实 现程序块的规律性变化。 9. 块寻址方式 块寻址方式经常用在输入输出指令中,以实现外存储器或外围 设备同内存之间的数据块传送。块寻址方式在内存中还可用于数据 块搬家。 块寻址时,通常在指令中指出数据块的起始地址(首地址 )和数据块的长度(字数或字节数)。 如果数据块是变长的,可用三种方法指出它的长度: (1)指令中划出字段指出长度; (2)指令格式中指出数据块的首地址与末地址; (3)由块结束字符指出数据块长度。 操作码 首地址 标志位 末地址 10. 段寻址方式 微型机中采用了段寻址方式,例如它们可以给定一个20位的地 址,从而有1M存储空间的直接寻址能力。为此将整个1M空间存储 器以64K为单位划分成若干段。在寻址一个内存具体单元时,由一 个基地址再加上某些寄存器提供的16位偏移量来形成实际的20位物 理地址。这个基地址就是CPU中的段寄存器。在形成20位物理地址 时,段寄存器中的16位数会自动左移4位,然后以16位偏移量相加 4.3.3 寻址方式举例 ,即可形成所需的内 存地址。 这种寻址方式的 实质还是基址寻址。 2.pentium的寻址方式 外部地址总线宽度是36位,但它也支持32位物理地址空间。 在实地址模式下,逻辑地址形式为段寻址方式:将段名所指定 的段寄存器内容(16位)左移4位,低4位补全0,得到20位段基地址 ,再加上16位段内偏移,即得20位物理地址。 在保护模式下,32位段基地址加上段内偏移得到32位线性地址 。由存储管理部件将其转换成32位的物理地址。 Pentium的寻址方式 下面对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 段的段内偏移。 例3 一种二地址RS型指令的结构如下所示: 6位 4位 1位 2位 16位 其中I为间接寻址标志位,X为寻址模式字段,D位偏移量字段。通 过I,X,D的组合,可构成下表所示的寻址方式。 请写出六种寻址 方式的名称。 解:直接寻址 相对寻址 变址寻址 寄存器间接寻址 间接寻址 基址寻址 OP I X 偏移量D 例4 某16位机器所使用的指令格式和寻址方式如下所示,该机有 两个20位基址寄存器,四个16位变址寄存器,十六个16位通用寄存 器,指令汇编格式中的S(源),D(目标)都是通用寄存器,M是 主存中的一个单元。三种指令的操作码分别是MOV(OP)(A )H ,STA(OP)(1B)H ,LDA(OP)(3C)H。MOV 是 传送指令,STA为写数指令,LDA为读数指令。 要求: 分析三种指令的指令格式与寻址方式特点。 CPU完成哪一种操作所花时间最短?哪一种操作所花时间 最长?第二种指令的执行时间有时会等于第三种指令的执行时间吗 ? 下列情况下每个十六进制指令字分别代表什么操作?其中如 果有编码不正确,如何改正才能成为合法指令? (F0F1)H (3CD2)H (2856)H (6FD6)H (1C2)H 解: 第一种指令是单字长二地址指令,RR型; 第二种指令是双字长二地址指令,RS型, 其中S采用基址寻址或变址寻址,R由源寄存器决定; 第三种也是双字长二地址指令,RS型, 其中R由目标寄存器决定,S由20位地址(直接寻址)决定。 处理机完成第一种指令所花时间最短,因为是RR型指令,不 需要访问存储器。第二种指令所花时间最长,因为是RS型指令,需 要访问存储器,同时要进行寻址方式的变换运算(基址或变址), 这也需要时间。第二种指令的执行时间不会等于第三种指令, 因为第三种指令虽然也访问存储器,但节省了求有效地址运算的时 间开销。 MOV(OP)001010 根据已知条件: STA(OP)011011 LDA(OP)111100 将指令的十六进制格式转换成二进制代码且比较后可知: (F0F1)H (3CD2)H 指令代表LDA指令,编码正确,其含义是把 主存(13CD2)H 地址单元的内容取至15号寄存器。 (2856)H 指令代表MOV指令,编码正确,含义是把6号源寄存器 的内容传送至5号目标寄存器。 (6FD6)H 是单字长指令,一定是MOV指令,但编码错误,可改 正为(28D6)H。 (1C2)H 是单字长指令,代表MOV指令,但编码错误,可改正为 (28C2)H 。 4.4 堆栈寻址方式 4.4.1 串联堆栈 堆栈是一组能存储和取出数据的暂时存储单元。 堆栈和其他形式的存储器之间的差别就在于,它们对数据的存 取方法或寻址方法有所不同。 我们先来看看常用的一种堆栈方法:串联堆栈。 一些计算机的CPU中有一组专门的寄存器,有16个或更多,它 们称为串联堆栈,其中每一个寄存器能保存一个字的数据。假如由 于某种原因,我们需要空出某个通用寄存器时,就可将某个通用寄 存器内容存入堆栈。以后若需要这部分数据时,又可以从堆栈中取 回来。 从CAI演示中可以看出:所有的数据传送是在栈顶和某个通用 寄存器之间进行的,通用寄存器仅和堆栈的顶部单元相联系。通常 ,CPU通过“进栈”指令把数据送入堆栈,而通过“出栈”指令把数据 从堆栈中取出。这种结构通常称作“下压堆栈”或“串联堆栈”。串联 堆栈这个名字反映了每当一个新数被压进栈顶时,数据串联的向下 通过堆栈的特性。出栈时,最后进入栈的数首先从栈中取出。因此 这种结构通常又称为“后进先出”堆栈。 串联堆栈存在一些限制: 一是寄存器的数目一般是有限的。如堆栈有8个寄存器,那么 把多于8个的数据压入堆栈时,“老”的数据就从栈底压出并被丢失 。 二是堆栈的读出是破坏性的。当从堆栈取出一个数时,它就不 能再在堆栈中存在。 由于有这些限制,通常由程序员设置出一部分主存储器来作为 堆栈,称为存储器堆栈。 这种堆栈有三个优点: 堆栈能够具有程序员要求的任意长度; 只要程序员喜欢,愿意建立多少堆栈,就能建立多少堆栈; 可以用对存储器寻址的任何一条指令来对堆栈中的数据进行 寻址。 在存储器类型的堆栈中,需要一个堆栈指示器,它是CPU中一 个专用的寄存器。堆栈指示器指定的存储器单元,就是堆栈的栈顶 。 在设计计算机系统时,把主存储器的一部分用作堆栈区。一旦 设定堆栈区后,这一部分就不能用作其他用途。 存储器堆栈的“进栈”,“出栈”操作见CAI演示 4.4.2 存储器堆栈 当建立存储器堆栈时,可用程序来设置。把一个主存地址送入 堆栈指示器,就可确定堆栈的顶。在存储器堆栈中,数据的压入或 取出操作,通常也是使用“进栈”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论