汇编:关于栈的知识

1.入栈和出栈指令

[2. SS与SP](#2. SS与SP)

[3. 入栈与出栈](#3. 入栈与出栈)

[3.1 执行push ax ↑↑](#3.1 执行push ax ↑↑)

[3.2 执行pop ax ↓↓](#3.2 执行pop ax ↓↓)

[3.3 栈顶超界的问题](#3.3 栈顶超界的问题)

[4. 寄存器赋值](#4. 寄存器赋值)


基于8086CPU编程时,可以将一段内存当作栈来使用。一个栈段最大可以设为64KB(0-FFFFH)。

1.入栈和出栈指令

  • push(入栈)
  • pop (出栈)

--- push ax:将寄存器ax中的数据送入栈中

--- pop ax:从栈顶 取出数据送入 ax

--- 入栈和出栈操作都是以【 (16位)】为单位进行

--- pop和push可以在寄存器和内存之间传送数据

2. SS与SP

8086CPU中,有两个寄存器

  • SS:段寄存器,存放栈顶段地址
  • SP:寄存器,存放栈顶偏移地址【专用寄存器】

任意时刻SS:SP指向栈顶元素。

若栈为空,sp指向最高地址单元的下一个单元。

3. 入栈与出栈

栈顶是低地址单元, 栈底是高地址单元。

3.1 执行push ax ↑↑
  • sp=sp-2(偏移地址减少,即往低地址处偏移栈顶方向)
  • 将ax中的内容送入到ss:sp指向的内存单元
  • ss:sp此时指向新栈顶
3.2 执行pop ax ↓↓
  • 将ss:sp指向的内存单元的内容送入到ax中(取出的内容在内存中仍存在,并没有被重置,下一轮push会覆盖)
  • sp=sp+2(偏移地址增加,即往高地址处偏移栈底方向)
3.3 栈顶超界的问题

8086CPU没有记录栈顶上下限的寄存器,不保证栈的操作不会越界。栈空时pop出栈或当栈满时push入栈都会发生栈顶超界问题,操作到栈以外的数据。

4. 寄存器赋值

关于cs、ip、ss、sp、ds的赋值:

  • 可以通过mov直接给sp赋值【立即数寻址】
  • 不能通过mov给cs、ip、ss、ds赋值
  • 给cs和ip赋值需要使用jum指令
  • 给ss和ds赋值需要使用mov ss/ds, 寄存器;【寄存器寻址】
相关推荐
LinXunFeng1 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
玖玥拾6 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
闪闪发亮的小星星6 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq6 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
阿米亚波6 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.6 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
.千余6 天前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他
自传.6 天前
尚硅谷 Vibe Coding|第二章 AI编程工具生态 学习笔记
笔记·学习·ai编程·尚硅谷·vibe coding
秋波。未央6 天前
Java Agent 开发 · Day 1 学习笔记(含作业完整标准答案)
java·笔记·学习
中屹指纹浏览器6 天前
2026指纹浏览器字体指纹、字体渲染偏差检测与全维度虚拟字体池搭建方案
经验分享·笔记