计算机系统概论第十章.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机系统概论第十章

第十章 最后……栈 我们已经结束了对LC-3指令集结构的处理。在向上进入十一章的又一个抽象层次到达C语言程序设计之前,我们应该花一些时间在一个特别重要的基础话题上:栈。首先,我们将详细的解释其基本结构,然后,我们将描述栈的3个作用:(1)我们在8.5节承诺要介绍的中断驱动的I/O机制的剩余部分;(2)实现临时存储中间结果的算术运算的一个机制是栈,而非通用寄存器;(3)二进制补码整数与ASCII码字符串之间的转换算法。这3个例子只是冰山一角。在计算机科学与工程中,你会发现栈在你所做的大多数工作中都非常有用。我们猜想在本书成为你的一个愉快的回忆之后,你会发现栈的新作用。 我们将通过一个计算器的设计,一个使用了在本章讨论的许多主题的复杂应用,来结束我们在指令集结构层次上的介绍。 10.1 栈:基本结构 10.1.1 栈—— 一种抽象数据类型 贯穿在你的将来对计算机的使用(或设计)之中,你将会遇到一种名为栈的存储结构。栈可以通过许多不同的方式来实现,我们将立刻开始学习。但是首先,知道栈的概念与其实现毫无关系是很重要的。栈的概念是说明它如何被访问。也就是说,栈的定义是你最后存入栈的东西首先被取出。那就是栈与别的东西的不同之处。简单地说:后进先出 (Last In, First Out),或者LIFO。 在计算机程序设计语言的术语中,栈是抽象数据类型的一个例子。也就是说,一种抽象数据类型是一类存储机制,这种机制是由对它执行的操作所定义的,而不是实现它的方式。在第19章,我们将使用链表用C语言写程序,链表是另一种抽象数据类型的例子。 10.1.2 两个实现栈的例子 汽车扶手中的硬币盒就是栈的一个例子。你取出第一个25美分付高速公路通行税,而这25美分就是你刚刚最后放到25美分的栈中的。当你加入一个25美分的时候,先前的一个就会被压在下面。 图10.1显示了硬币盒的行为。开始时,如图10.1a里面是空的。第一次高速公路通行税是75美分,你给了收费员一美元,她找了你25美分,一个1995年的硬币,你把它插入硬币盒。此时的硬币盒如图10.1b所示。 对于向栈插入元素和从栈移出元素有专门的术语。当我们把一个元素插入栈的时候,我们称之为压栈(push),当我们移出一个元素时,我们称之为出栈(pop)。 第二次高速公路通行税是4.25美元。你给了收费员5美元,她找了你75美分。你把它们放进了硬币盒中。首先放进去的是1982年的,然后是1998年的,最后是1996年的。现在,硬币盒如图10.1c所示。第三次通行税是50美分,你移出(出栈)硬币盒顶上的两个25美分,先拿1996年的,然后再拿1998年的,那么,硬币盒如图10.1d所示。 硬币盒是一个栈的例子。因为它正好符合后进先出的要求。每一次放一个25美分进去,总是从顶部插入。每次取一个25美分出来,也是从顶部去取。你最后放进去的硬币是你首先要拿走的,因此,它是一个栈。 另一个栈的实现,有时被称为硬件栈,如图10.2所示。它的行为类似于我们刚刚描述的硬币盒。它由一定数量的寄存器组成,每个寄存器可以存储一个元素。图10.2中的例子含有5个寄存器。当每个元素被存入或取出时,已经在栈里的元素就会移动。 在图10.2a中,栈的初始状态显示为空。访问总是经由第一个元素,它被标记为栈顶(TOP)。如果数值18被压入栈,我们就有了图10.2b。如果3个数值31,5,12被压入栈(按顺序),我们就有图10.2c。最后,如果有2个元素从栈中取出,我们就有图10.2d。图10.2的栈的显著特征,和往硬币盒里放硬币一样,就是当每一个值被存入或取出时,在栈中的所有的值都要移动。 10.1.3 在存储器中的实现 现在,在计算机中栈的最普遍的实现被显示于图10.3中。这个栈由一组存储单元和被称为“栈指针”的机制组成,栈指针指示了这个栈的栈顶。也就是说,包含最后压入的元素的存储单元。每个压入的值被存储在一个存储单元中。在这种情况下,已经存储在栈中的数据不会进行物理移动。 在如图10.3所示的例子中,这个栈由5个单元组成,x3FFF到x3FFB。R6是栈指针。 图10.3a显示了一个原来为空的栈。图10.3b显示压入18这个值之后的栈,图10.3c显示依次压入31,5和12这几个值之后的栈。图10.3d显示从栈顶取出2个元素之后的栈。注意到这2个顶部的元素(数值5和12)仍然存在于存储单元x3FFD和x3FFC中。然而,正如我们即将看到的,只要访问存储器被栈机制所控制,5和12这些值就不能从存储器中被访问。 Push 在图10.3a中,R6包含x4000,即栈第一个单元(BASE)的前面一个地址。这说明这个栈初始为空。图10.3的栈的BASE地址是x3FFF。 我们先将数

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档