第三章--堆栈段的工作方式

转载 2016年08月30日 22:18:49
堆栈段在实模式和保护模式下的工作方式相同,下面我们只介绍在实模式下的工作方式:
其中SS 堆栈段寄存器,用来存储堆栈段的初始地址;SP 堆栈指针寄存器,用来存储堆栈段的栈顶偏移量。
堆栈段初始化的工作如下:

 

SS定位到堆栈段的起始地址(基地址,低地址),栈底位于堆栈段的有效地址的最末端(高地址)。SP初始化为堆栈段的大小,SS:SP永远指向堆栈的栈顶。在初始化时,SS:SP指向堆栈段的最高地址(此时,栈底和栈顶都指向这一内存地址)。随着压入元素,SP不断变小,进而SS:SP代表的栈顶地址变小,不在等于栈底地址,而是逐渐靠近堆栈段的起始地址,当SP为0时,SS:SP代表的栈顶地址与SS:0000代表的堆栈段的起始地址相等,进而确定栈满,CPU也是通过判断SP <0来检验堆栈是否溢出的。

使用该堆栈段,执行下面一段代码:
mov ax,1234H
push ax

从这里我们可以更清楚的看出来,SS指向的是堆栈段的起始地址,SS:SP指向的是栈顶,栈底为高地址。

为了更清楚的理解堆栈段的工作方式,现在我们来看下面的题目:
如果一个堆栈从地址3250H:0000H开始,它的最后一个字的偏移地址为0100H,SP的内容为0052H,问:
1 栈顶地址是什么?
2 栈底地址是什么?
3 存入数据1234H和5678H后,SP的内容是多少?

答案:
1 堆栈的最高地址叫栈底,堆栈指示器SP总是指向栈顶。
栈顶地址=(SS) × 10H + (SP)=3250H × 10H + 0052H=32552H
2 栈底地址=(SS) × 10H + 0100H = 32600H
3 8086CPU中堆栈存取必须以字为单位。存入数据1234H和5678H后,即两个字压入堆栈后,SP减4,SP的内容为:(SP) - 字数 × 2=0052H - 2 × 2=004EH。SS的内容不变。


汇编的堆栈段寄存器讲解

  • 2010年09月22日 01:32
  • 27KB
  • 下载

通用寄存器 段寄存器

通用寄存器8 个通用寄存器是 8086 寄存器的超集,它们的名称和用途分别为:EAX 一般用作累加器EBX 一般用作基址寄存器( Base )ECX 一般用来计数( Count )EDX 一般用来存放...
  • robbie1314
  • robbie1314
  • 2012年03月03日 22:57
  • 1902

数据段、代码段、堆栈段、BSS段的区别

5个数据段        进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是...
  • jxhui23
  • jxhui23
  • 2012年10月12日 15:25
  • 41824

程序内存空间(代码段、数据段、堆栈段)

在冯诺依曼的体系结构中必须有:代码段,堆栈段,数据段。 进程的虚拟地址空间图示如下: 堆栈段:   1. 为函数内部的局部变量提供存储空间。   2. 进行函数调用时,存储“过程活动记录”...
  • ywcpig
  • ywcpig
  • 2016年08月24日 20:55
  • 1448

内存空间分几部分:代码段、数据段,栈,堆 (收集整理)

1.函数代码存放在代码段。声明的类如果从未使用,则在编译时,会优化掉,其成员函数不占代码段空间。 全局变量或静态变量,放在数据段, 局部变量放在栈中, 用new产生的对象放在堆中, 内...
  • YEYUANGEN
  • YEYUANGEN
  • 2011年09月10日 21:52
  • 29197

堆栈的工作原理

声明:以下均为个人见解,错漏地方还请指正 每一个使用c语言的都应该知道栈的重要性,我们能够使用C/C++语言写出诸多复杂的程序,很大功劳一部分有归于栈的实现,因为它可以帮助我们实现函数间的嵌套调用...
  • lee244868149
  • lee244868149
  • 2015年10月29日 21:52
  • 3978

《一个操作系统的实现》读书笔记--第三章--堆栈段的工作方式

堆栈段在实模式和保护模式下的工作方式相同,下面我们只介绍在实模式下的工作方式: 其中SS 堆栈段寄存器,用来存储堆栈段的初始地址;SP 堆栈指针寄存器,用来存储堆栈段的栈顶偏移量。 堆栈段初始化的工作...
  • zgh1988
  • zgh1988
  • 2012年02月13日 21:46
  • 5326

对堆栈中分析的比较好的文章进行的总结

堆和栈的区别,堆在哪里,栈在哪里?栈更快因为所有的空闲内存都是连续的,因此不需要对空闲内存块通过列表来维护。只是一个简单的指向当前栈顶的指针。...
  • jin13277480598
  • jin13277480598
  • 2017年01月13日 15:54
  • 902

8086的堆栈组织

堆栈段的最大长度为64KB 采用向上生长方式
  • liuyuzhu111
  • liuyuzhu111
  • 2015年11月23日 21:26
  • 714

第三章--堆栈段的工作方式

堆栈段在实模式和保护模式下的工作方式相同,下面我们只介绍在实模式下的工作方式: 其中SS 堆栈段寄存器,用来存储堆栈段的初始地址;SP 堆栈指针寄存器,用来存储堆栈段的栈顶偏移量。 堆栈段初始化的...
  • judyge
  • judyge
  • 2016年08月30日 22:18
  • 940
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第三章--堆栈段的工作方式
举报原因:
原因补充:

(最多只允许输入30个字)