计算机系统概论第十章

计算机系统概论第十章

ID:37574509

大小:68.00 KB

页数:14页

时间:2019-05-25

计算机系统概论第十章_第1页
计算机系统概论第十章_第2页
计算机系统概论第十章_第3页
计算机系统概论第十章_第4页
计算机系统概论第十章_第5页
资源描述:

《计算机系统概论第十章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第十章最后……栈我们已经结束了对LC-3指令集结构的处理。在向上进入十一章的又一个抽象层次到达C语言程序设计之前,我们应该花一些时间在一个特别重要的基础话题上:栈。首先,我们将详细的解释其基本结构,然后,我们将描述栈的3个作用:(1)我们在8.5节承诺要介绍的中断驱动的I/O机制的剩余部分;(2)实现临时存储中间结果的算术运算的一个机制是栈,而非通用寄存器;(3)二进制补码整数与ASCII码字符串之间的转换算法。这3个例子只是冰山一角。在计算机科学与工程中,你会发现栈在你所做的大多数工作中都非常有用。我们猜想在本书成为你的一个愉快的回忆之后,你会发现栈的新作用。我

2、们将通过一个计算器的设计,一个使用了在本章讨论的许多主题的复杂应用,来结束我们在指令集结构层次上的介绍。10.1栈:基本结构10.1.1栈——一种抽象数据类型贯穿在你的将来对计算机的使用(或设计)之中,你将会遇到一种名为栈的存储结构。栈可以通过许多不同的方式来实现,我们将立刻开始学习。但是首先,知道栈的概念与其实现毫无关系是很重要的。栈的概念是说明它如何被访问。也就是说,栈的定义是你最后存入栈的东西首先被取出。那就是栈与别的东西的不同之处。简单地说:后进先出(LastIn,FirstOut),或者LIFO。在计算机程序设计语言的术语中,栈是抽象数据类型的一个例子。

3、也就是说,一种抽象数据类型是一类存储机制,这种机制是由对它执行的操作所定义的,而不是实现它的方式。在第19章,我们将使用链表用C语言写程序,链表是另一种抽象数据类型的例子。10.1.2两个实现栈的例子汽车扶手中的硬币盒就是栈的一个例子。你取出第一个25美分付高速公路通行税,而这25美分就是你刚刚最后放到25美分的栈中的。当你加入一个25美分的时候,先前的一个就会被压在下面。图10.1显示了硬币盒的行为。开始时,如图10.1a里面是空的。第一次高速公路通行税是75美分,你给了收费员一美元,她找了你25美分,一个1995年的硬币,你把它插入硬币盒。此时的硬币盒如图10

4、.1b所示。对于向栈插入元素和从栈移出元素有专门的术语。当我们把一个元素插入栈的时候,我们称之为压栈(push),当我们移出一个元素时,我们称之为出栈(pop)。第二次高速公路通行税是4.25美元。你给了收费员5美元,她找了你75美分。你把它们放进了硬币盒中。首先放进去的是1982年的,然后是1998年的,最后是1996年的。现在,硬币盒如图10.1c所示。第三次通行税是50美分,你移出(出栈)硬币盒顶上的两个25美分,先拿1996年的,然后再拿1998年的,那么,硬币盒如图10.1d所示。硬币盒是一个栈的例子。因为它正好符合后进先出的要求。每一次放一个25美分进

5、去,总是从顶部插入。每次取一个25美分出来,也是从顶部去取。你最后放进去的硬币是你首先要拿走的,因此,它是一个栈。另一个栈的实现,有时被称为硬件栈,如图10.2所示。它的行为类似于我们刚刚描述的硬币盒。它由一定数量的寄存器组成,每个寄存器可以存储一个元素。图10.2中的例子含有5个寄存器。当每个元素被存入或取出时,已经在栈里的元素就会移动。在图10.2a中,栈的初始状态显示为空。访问总是经由第一个元素,它被标记为栈顶(TOP)。如果数值18被压入栈,我们就有了图10.2b。如果3个数值31,5,12被压入栈(按顺序),我们就有图10.2c。最后,如果有2个元素从栈

6、中取出,我们就有图10.2d。图10.2的栈的显著特征,和往硬币盒里放硬币一样,就是当每一个值被存入或取出时,在栈中的所有的值都要移动。10.1.3在存储器中的实现现在,在计算机中栈的最普遍的实现被显示于图10.3中。这个栈由一组存储单元和被称为“栈指针”的机制组成,栈指针指示了这个栈的栈顶。也就是说,包含最后压入的元素的存储单元。每个压入的值被存储在一个存储单元中。在这种情况下,已经存储在栈中的数据不会进行物理移动。在如图10.3所示的例子中,这个栈由5个单元组成,x3FFF到x3FFB。R6是栈指针。图10.3a显示了一个原来为空的栈。图10.3b显示压入18

7、这个值之后的栈,图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。我们先将数值18压入栈,结果如图10.3b所示。栈指针提供最后被压入的那个值所在的地址,在本例中,是存储18的x3FFF。注意

8、单元x3F

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。