【汇编语言】从最底层的角度理解“堆栈”

目录:

  • 前言
  • 一、什么是堆栈?
  • 二、堆栈的前言知识
  • 三、堆栈的操作
      • 1、栈的初始化
      • 2、入栈
      • 3、出栈
  • 三、注意事项
  • ❤️❤️❤️忙碌的敲代码也不要忘了浪漫鸭!

前言

✨你好啊,我是“ 怪& ”,是一名在校大学生哦。
主页链接:怪&的个人博客主页
☀️博文主更方向为:课程学习知识、作业题解、期末备考。随着专业的深入会越来越广哦…一起期待。
❤️一个“不想让我曾没有做好的也成为你的遗憾”的博主。
很高兴与你相遇,一起加油!

一、什么是堆栈?

堆栈是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的 。堆这个存储区存入的数据,是一种特殊的数据结构。所有的数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照“先进后出”的原则存取,位于其中间的元素,必须在其栈上部(后进栈者)诸元素逐个移出后才能取出。在内存储器(随机存储器)中开辟一个区域作为堆栈,叫软件堆栈;用寄存器构成的堆栈,叫硬件堆栈。
简介:

  • 一种数据结构
  • 堆栈的元素进出遵循:“先进后出”原则

想必大家在使用高级语言,例如:java,c,c++,python等都使用过堆栈,其运行机理大体明白,但细节部分还较模糊。
此篇文章将从《汇编语言》即计算机最底层的角度让你重新认识堆栈

二、堆栈的前言知识

提及《汇编语言》,不可避免的要讲14个寄存器,如图 (基于8086CPU的哦)
【汇编语言】从最底层的角度理解“堆栈”_第1张图片
江湖上流传着:“把这14个寄存器学明白,汇编语言就毕业了”的传说。
即然此文讲堆栈,则我们就需要了解:

  • SS:堆栈段寄存器
  • SP:堆栈指针寄存器组
    8086CPU的入栈和出栈操作都是以字(word)为单位进行的。一个字(word)为两个字节(byte)。
    任意时刻,SS:SP指向栈顶元素
    栈为空时,SS:SP指向栈空间最高地址单元的下一个单元。(因为“任意时刻,SS:SP指向栈顶元素”,所以栈空时不存在栈顶元素,所以SS:SP只能指向栈的最底部单元下面的单元。)

三、堆栈的操作

1、栈的初始化

mov ax,1000H
mov ss,ax	;设置栈的段地址ss=1000H,不能直接向段寄存器SS送入数据,所以用ax中转
mov sp,0010H

【汇编语言】从最底层的角度理解“堆栈”_第2张图片

2、入栈

mov ax,1234
push ax

Push ax实际是执行了两个操作:

  • SP=SP-2
  • 将ax内容送入SS:SP指向的内存单元中,SS:SP此时指向新栈顶

存储,遵循“高位存高位,低位存低位”的原则。
【汇编语言】从最底层的角度理解“堆栈”_第3张图片

3、出栈

Pop bx

pop bx实际是执行了两个操作:

  • 将SS:SP指向的内存单元处的数据送入BX中
  • SP=SP+2,SS:SP指向当前栈顶下面的单元(新的栈顶)
    【汇编语言】从最底层的角度理解“堆栈”_第4张图片

三、注意事项

  • 汇编语言不区分大小写
  • 编程时小心栈顶超界:防止“ 栈满继续入栈” 和 “ 栈空继续出栈 ”的超界现象。
  • 堆栈空间也是内存空间的一部分

❤️❤️❤️忙碌的敲代码也不要忘了浪漫鸭!

【汇编语言】从最底层的角度理解“堆栈”_第5张图片

你可能感兴趣的:(程序员的必修之课,汇编语言,笔记)