《计算机接口技术及应用》课件-5.9 数据传送指令之堆栈和堆栈指针_第1页
《计算机接口技术及应用》课件-5.9 数据传送指令之堆栈和堆栈指针_第2页
《计算机接口技术及应用》课件-5.9 数据传送指令之堆栈和堆栈指针_第3页
《计算机接口技术及应用》课件-5.9 数据传送指令之堆栈和堆栈指针_第4页
《计算机接口技术及应用》课件-5.9 数据传送指令之堆栈和堆栈指针_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

微机原理及应用第五章8086指令系统第九讲数据传送指令之堆栈和堆栈指针下面我们来学习数据传输指令中的堆栈指令数据传送指令之堆栈和堆栈指针在讲解堆栈指令之前,我们先来复习一下堆栈的相关概念堆栈相关概念堆栈指令什么是堆栈?首先看一下什么是堆栈堆栈是我们在内存中开辟的一个比较特殊的区域,它按照先进后出的工作方式进行数据的存取,将数据存入堆栈的操作叫做压栈,数据从堆栈中取出来的操作叫做弹出堆栈内存中特殊区域数据存入操作压栈数据取出操作弹出按先进后出方式进行数据存取那么为什么要设置堆栈?为什么设置堆栈?堆栈为什么要按照先进后出的方式工作呢?堆栈为什么按先进后出方式工作?主要是在很多情况下,程序需要临时存储一些信息,在完成了程序以后,又需要按照相反的次序来恢复这些信息程序存储信息完成程序后按相反次序恢复信息IP我们知道,IP中存储了程序下一条将要执行的指令的偏移地址,通常情况下,IP值会自动修改以调整程序的走向,存储程序下一条执行的指令偏移地址;IP值自动修改以调整程序走向。但是,在主程序调用子程序的情况下,会比较特殊主程序调子程序主程序IP转子程序压栈执行子程序弹出返回主程序IP(下)继续执行主程序特殊主程序调用子程序的意思,就是主程序走着走着停下来,跑去执行另一个程序就是子程序,等子程序执行完以后,再回到刚刚停止的地方,继续执行。主程序调子程序主程序IP转子程序压栈执行子程序弹出返回主程序IP(下)继续执行主程序在这种情况下ip有两个值,一个是子程序起始指令的偏移地址,另一个是主程序下一条指令的偏移地址。主程序调子程序主程序IP转子程序压栈执行子程序弹出返回主程序IP(下)继续执行主程序子程序起始指令偏移地址主程序下一条指令偏移地址在ip被修改为子程序起始指令的偏移地址之前,必须将主程序下一条指令的偏移基址记录在某个地方。ip被修改之前,会将主程序下一条指令的偏移基址记录在某个地方主程序调子程序主程序IP转子程序压栈执行子程序弹出返回主程序IP(下)继续执行主程序等程序返回的时候,再把这个值告诉IP,这就是堆栈的作用,它可以用来暂存数据,等有需要的时候,再从堆栈中把这个数据取出来。主程序调子程序主程序IP转子程序压栈执行子程序弹出返回主程序IP(下)继续执行主程序堆栈作用暂存数据如需再取所以,主程序在调用子程序之前,先将主程序下一条指令的IP值压入到堆栈中,然后修改IP值为子程序的起始地址,去执行子程序主程序调子程序主程序IP转子程序压栈执行子程序弹出返回主程序IP(下)继续执行主程序调用子程序之前堆栈段栈底栈顶IPSS修改IP值为子程序的起始地址当子程序执行完毕,再从堆栈中弹出主程序下一条指令的地址给IP,继续执行主程序主程序调子程序主程序IP转子程序压栈执行子程序弹出返回主程序IP(下)继续执行主程序堆栈段栈底栈顶IPSS那堆栈为什么是先进后出呢?堆栈为什么先进后出?我们来看另一个例子,这次,主程序要调用两个子程序,而且这两个子程序是嵌套的,也就是子程序二是由子程序一调用的。子程序一是由主程序调用的子程序嵌套示意图主程序IPIP1转子程序1返回主程序IP’执行子程序2返回子程序1IP’1执行子程序1继续执行子程序1压栈弹出继续执行主程序子程序嵌套示意图堆栈段栈底栈顶SSIP1IP’1主程序IP转子程序1压栈执行子程序2弹出返回主程序IP1继续执行主程序执行子程序1IP´IP´1返回子程序1继续执行子程序1主程序调用2个子程序子程序2由子程序1调用2个子程序嵌套子程序1由主程序1调用根据我们刚才的讨论,这个时候有两个程序的断点需要被记录,一个是主程序的下一条指令的地址叫IP1,堆栈段栈底栈顶SSIP1IP’12个程序断点需记录主程序下一条指令地址:IP1子程序嵌套示意图主程序IP转子程序1压栈执行子程序2弹出返回主程序继续执行主程序执行子程序1IP´IP´1返回子程序1继续执行子程序1IP1IP1子程序嵌套示意图主程序IP转子程序1压栈执行子程序2弹出返回主程序继续执行主程序执行子程序1IP´IP´1返回子程序1继续执行子程序1IP1当主程序调用子程序的时候,IP1被压入到堆栈中堆栈段栈底栈顶IP1SSIP´1主程序调用子程序当子程序1执行到IP一撇的时候,它要去调用子程序2,此时,它要再记录一下,子程序1下一条要执行的指令的地址IP’1,然后把他再压入到堆栈中堆栈段栈底栈顶IP1SSIP´1子程序嵌套示意图主程序IP转子程序1压栈执行子程序2弹出返回主程序IP1继续执行主程序执行子程序1IP´IP´1返回子程序1继续执行子程序1记录压入堆栈再去执行子程序二,当子程序二执行完毕,我们要从堆栈中弹出IP’1,告诉IP子程序一的下一条指令的地址堆栈段栈底栈顶IP1SSIP´1子程序嵌套示意图主程序IP转子程序1压栈执行子程序2弹出返回主程序IP1继续执行主程序执行子程序1IP´IP´1返回子程序1继续执行子程序1IP子程序1下一条指令地址当子程序1执行完以后,我们要从堆栈中再弹出IP1,告诉IP,主程序的下一条指令的地址,堆栈段栈底栈顶IP1SS子程序嵌套示意图主程序IP转子程序1压栈执行子程序2弹出返回主程序IP1继续执行主程序执行子程序1IP´IP´1返回子程序1继续执行子程序1告知主程序下一条指令地址好继续执行主程序,你看这个流程就是先进入堆栈的内容,最后从堆栈中弹出,而后进入堆栈的内容要先从堆栈中弹出,堆栈段栈底栈顶SS子程序嵌套示意图主程序IP转子程序1压栈执行子程序2弹出返回主程序IP1继续执行主程序执行子程序1IP´IP´1返回子程序1继续执行子程序1先进入堆栈再弹出后进入堆栈先从堆栈弹出因此,堆栈是一个比较特殊的区域,它的运行方式是先进后出,主要的功能是临时存储程序中的一些信息,或保护一些信息不被修改堆栈段栈底栈顶SS堆栈是特殊区域先进后出临时存储信息保护信息进栈方向退栈方向堆栈段栈底栈顶SSSP在堆栈中,SS是它的段基址,sp是堆栈的指针,它始终指向堆栈的栈顶,也就是指向堆栈中最新进入堆栈的数据,sp向ss的方向移动的时候叫进栈,sp向栈底的方向移动的时候叫退栈SPSS堆栈段进栈方向退栈方向栈底栈顶SS段基址SP堆栈指针指向堆栈中最新进入堆栈的数据进栈退栈栈顶退栈进栈方向退栈方向堆栈段栈底栈顶SSSPsp的初值位于栈底,表示堆栈是空的,它的初值就规定了堆栈的大小,栈底就是堆栈中最高地址的位置sp初值SP堆栈空堆栈大小堆栈中最高地址位置进栈方向退栈方向堆栈段栈底栈顶SSSP堆栈的存储是以字为单位进行的,也就是每一次有数据进来的时候一定是一个字,会占用两个存储空间,每次数据从堆栈中

温馨提示

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

评论

0/150

提交评论