堆栈寻址方式的地址是隐含的,在指令中不必给出操作数的地址,因此,指令的长度很短,一般的形式有:

OPC

OPC M

前一种是标准的采用堆栈寻址方式的指令,参加运算所需要的操作数从堆栈顶端弹出,如果需要两个或多个操作数,则依次从堆栈顶端弹出,运算结果压入堆栈顶端。

后一种堆栈指令在RISC计算机中仅仅用来在栈顶与其他主存储器单元之间交换数据,在CISC计算机中也可以用于运算指令,指令所需要的一个操作数来自于主存储器,其它操作数从栈顶弹出,运算结果压入栈顶。

从60年代开始,出现了一批以堆栈寻址方式为主的堆栈计算机,这类计算机系统与上面提到的以寄存器寻址方式和主存寻址方式为主的计算机系统相比,在一定程度上缩小了高级语言与机器语言的差距,堆栈计算机具有如下特点:

(1)支持高级语言,有利与编译程序。因为一般的算术表达式可以很容易地转化成逆波兰表达式,而逆波兰表达式能够直接形成由堆栈指令组成的程序,这样就简化了编译程序。在指令系统这一节中,还要举例来分析。

以主存寻址方式为主的计算机系统,在编译一个算术表达式时,要为每一个变量分配主存单元,另外,还会人为地产生一些中间变量。如何减少中间变量的个数,合理地为变量分配存储单元,是编译器的一项许多相当困难的工作。

以寄存器寻址方式为主的计算机系统,编译器需要决定哪些变量放在通用寄存器中,哪些变量放在主存中,以减少访问主存储器的次数。另外,也同样存在如何减少了中间变量,节省了存储空间的问题。

(2)程序的总存储量最短。由于堆栈指令不需要地址码,指令的长度很短,与以寄存器寻址方式和以主存寻址方式为主的计算机系统相比,虽然程序本身的条数没有减少,但程序的总存储量要缩短许多。

(3)支持程序的嵌套和递归调用,支持中断处理。嵌套调用是指一个子程序又调用另一个子程序,递归调用是指一个子程序直接或经过别的子程序间接调用它本身,由此又可分为直接递归调用和间接递归调用。

在程序调用过程中,要保存返回地址,保存处理机状态,保存程序现场,并向子程序传送参数。在堆栈型计算机中,可以把这些信息都压入堆栈,而不必为它们赋予地址。当从子程序返回时,可以直接从堆栈中弹出所需要的信息。这样,可以减少大量的辅助操作,加快运算速度。

中断的处理过程与程序的调用很类似,使用堆栈能够加速中断的处理过程,简化中断程序设计。

堆栈型计算机的主要缺点是运算速度比较低,这是由于堆栈与处理机之间的信息传送量很大造成的。

实际上,对堆栈访问最频繁的堆栈顶部的几个单元。为了提高堆栈的工作速度,许多堆栈型计算机的栈顶部分设计成一个高速的寄存器堆。这样,访问堆栈就象访问寄存器一样快速。

目前,许多以寄存器寻址方式和主存寻址方式为主的计算机系统,也设置有堆栈,用以支持程序的嵌套和递归调用,支持中断处理。

堆栈型计算机指令的地址,堆栈寻址相关推荐

  1. 解释下列术语堆栈型计算机,计算机系统结构作业答案第二章(张晨曦)

    计算机系统结构作业答案第二章(张晨曦) 2.1 解释下列术语: 堆栈型机器:CPU 中存储操作数的单元是堆栈的机器.(书P26) 累加型机器--CPU 中存储操作数的单元是累加器的机器. 通用寄存器型 ...

  2. 【计算机系统结构】堆栈型替换算法

    堆栈型替换算法 定义:对任意一个程序的页地址流作两次主存页面数分配,分别分配 m 个主存页面和 n 个主存页面,并且有 m≤n.如果在任何时刻 t,主存页面数集合 Bt 都满足关系: Bt(m) Bt ...

  3. python堆栈溢出的原因_堆栈溢出一般是什么原因

    堆栈是一个在计算机科学中经常使用的抽象数据类型.堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列. 堆栈中定义了一些操作. 两个最重要的 ...

  4. go中的堆栈与C++中的堆栈

    各自努力,最高处见!加油! go中的堆栈与C++中的堆栈 一.C++中的堆栈 二.go程序中的堆栈 一.C++中的堆栈 C/C++中的堆栈是操作系统级别的概念,它通过编译器所在的环境来决定. 栈:指的 ...

  5. 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 逐层分析分析 静态地址 到 动态地址 的寻址 + 偏移 过程 ) ★

    文章目录 前言 一.上一篇博客中获取到的静态地址 二.第一层静态地址 cstrike.exe+1100ABC 三.第二层地址 四.第三层地址 五.第四层地址 六.静态地址 到 动态地址 的寻址 + 偏 ...

  6. 【Windows 逆向】内存地址分析 ( 内存条 | 虚拟内存 | 内存地址及寻址范围 | 内存地址与数据的关系 )

    文章目录 一.内存地址 1.内存条 2.虚拟内存 3.内存地址及寻址范围 二.内存地址与数据的关系 一.内存地址 1.内存条 启动设备后 , 运行的是操作系统 , 然后在操作系统中 , 运行的是应用软 ...

  7. 【Android 应用开发】Activity 返回堆栈清除操作 ( 默认状态 | 清除返回堆栈配置 | 不清除返回堆栈配置 | 清除指定界面配置 )

    文章目录 I . 返回堆栈 默认操作 II . 返回堆栈 保留所有元素操作 III . 返回堆栈 清除除根元素外所有元素操作 IV . 返回堆栈 清除指定的 Activity V . 总结 I . 返 ...

  8. python读取文件数据堆栈溢出的原因_堆栈溢出一般是什么原因?

    堆栈是一个在计算机科学中经常使用的抽象数据类型.堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列. 堆栈中定义了一些操作. 两个最重要的 ...

  9. mfc函数调用堆栈溢出_01 JavaScript 调用堆栈

    什么是 JavaScript  调用栈,为什么它是必要的? JavaScript 引擎是一个单线程解析器,而单线程解析器由堆和单一调用栈组成.浏览器提供 Web APIs,比如:DOM,AJAX 和 ...

最新文章

  1. C#接收串口RS232的CD、CTS、DSR信号
  2. android 定制ui,AndroidSDK-UI定制
  3. ID,ClientID,UniqueID的区别
  4. Neo4j:Cypher –属性值只能是原始类型或其数组
  5. 只能获取fixed语句初始值_因用了Insert into select语句,美女同事被开除了!
  6. 优化理论12---- Rosen的梯度投影法 、投影矩阵、 既约梯度法
  7. Unity3D--用2D图片实现3D轮转图
  8. 计算机组装后要干什么,电脑组装完后还有哪些事需要干?
  9. 移动端 设计师设计APP UI常用软件总结
  10. 西瓜书习题4.3 决策树
  11. ppt转图片LibreOffice解决方案--java
  12. php错误处理视频教程,PHP错误与异常调试视频教程资源分享
  13. 解决问题CondaVerificationError: The package for olefile located at...
  14. 同一局域网下 macOS 和 windows 电脑 如何快速共享文件
  15. 学习笔记 | Ch18 使用视图 view
  16. linux grub2 分辨率,如何安全地更改grub2屏幕分辨率?
  17. php atlas,使用Atlas实现读写分离
  18. 鱼搜_鱼搜官网_鱼搜搜索_http://www.7yusou.com
  19. 移动端浏览器沉浸式导航
  20. Unity项目接收不到android的KeyEvent的解决办法

热门文章

  1. 设置Canvas的 overrideSorting不生效
  2. 关于计算机经历兼职的英文作文,关于兼职的英文作文
  3. 多媒体计算机设计原则,多媒体CAI课件的设计原则
  4. 4-灵魂存在与否的论证(3):自由意志、濒死体验以及笛卡尔的论证(耶鲁大学公开课-哲学-死亡)
  5. 三星a9s参数_【三星GalaxyA9s评测】智能场景优化 三星A9s随手一拍让女友心满意足(全文)_三星 Galaxy A9s_手机评测-中关村在线...
  6. 625 Minimum Factorization
  7. oracle alter增加索引,sql – Oracle alter index允许索引空值
  8. ARMv8与linux的新手笔记
  9. 20201106 第七堂 列表(下)
  10. iOS Deep Linkin 和 Deferred Deep Linking