汇编网首页登录博客注册
aben126的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
文章收藏
友情链接

[2013-08-11 10:28] 第三章   寄存器(内存访问)

3.6 栈
栈的这种操作规则被称为:LIFO(Last In First Out,后进先出)。

3.7 CPU提供的栈机制
8086CPU提供入栈和出栈指令,最基本的两个是 PUSH(入栈)和 POP(出栈)。
任意时刻,SS:SP 指向栈顶元素。
PUSH AX   (SP=SP-2)
POP AX    (SP=SP=2)

3.8 栈顶超界的问题
在执行push、pop指令时,要注意当栈满的时候再使用push指令入栈,或栈空时再使用pop指令出栈,都将发生栈顶超界问题。

3.9 push、pop指令
push 寄存器         将一个寄存器中的数据入栈
pop 寄存器          出栈,用一个寄存器接收出栈的数据
push 段寄存器       将一个段寄存器中的数据入栈
pop 段寄存器        出栈,用一个段寄存器接收出栈的数据
push 内存单元       将一个内存字单元处的字入栈(注意:栈操作都是以字为单位)
pop 内存单元        出栈,用一个内存字单元接收出栈的数据
指令执行时,CPU要知道内存单元的地址,可以在push、pop指令中给出内存单元的偏移地址,段地址在指令执行时,CPU从ds中取得。

在SS、SP中存放栈顶的段地址和偏移地址;
提供入栈和出栈指令,它们根据SS:SP指示的地址,按照栈的方式访问内存单元。

push 指令的执行步骤:1,SP=SP-2;2,向SS:SP指向的字单元中送入数据。
pop 指令的执行步骤:1,从SS:SP指向的字单元中读取数据;2,SP=SP+2。
在任意时刻,SS:SP指向栈顶元素。
8086CPU只记录栈顶,栈空间的大小我们要自己管理。
用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入栈顺序相反。
push、pop实质上是一种内存传送指令,注意它们的灵活应用。


段的综述
数据段   DS
代码段   CS
栈段     SS
不管我们如何安排,CPU将内存中的某段内容当作代码,是因为CS:IP指向了那里;CPU将某段内存当作栈,是因为SS:SP指向了那里。
一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关键在于CPU中的寄存器的设置,即CS、IP,SS、SP,DS的指向。
评论次数(0)  |  浏览次数(344)  |  类型(学习笔记) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码