文章目录

  • 前言
  • 一、概念
  • 二、栈
    • 1.数据
      • 入栈
      • 出栈
    • 2.指令
      • push
      • pop
    • 3.设置
    • 4.栈顶越界
    • 5.栈的作用
      • 主要作用
      • 临时作用

前言

本文记录汇编语言中栈的概念和内容

一、概念

栈在汇编语言中,被定义为一段连续的内存单元
与数据结构类似,有数据入栈,出栈和栈顶的概念,但是在汇编语言中,我们可以直接接触到栈顶,也就是有相关标记表明栈顶的存在

二、栈

1.数据

在汇编语言中,入栈push和出栈pop可以对数据进行操作,这里进行操作的数据有如下的特征

  • 数据从寄存器和内存中来
  • 数据是字型数据,操作的是16位寄存器或内存中的字型数据

入栈

将16位寄存器或内存中的字型数据放到栈顶标记的上方
修改栈顶标记

出栈

将栈顶标记的字型数据 放到16位寄存器或内存中
修改栈顶标记

从上面我们可以看出,栈顶标记本质是一个内存地址,往栈(连续内存区域中)写入和拿出数据,都是针对相关内存地址进行修改;而在8086CPU中,在任意时刻,将段地址寄存器SS和偏移地址寄存器SP所组合出来的内存地址当作栈顶标记!

2.指令

push

push ax 所做的事情如下
修改SP寄存器中的数值:SP=SP-2
将AX中的字型数据->放到SS:SP所组合的内存地址中,入栈

pop

pop bx
将SS:SP所组合出的内存地址中的字型数据->bx
修改栈顶标记 SP=SP+2,出栈

3.设置

所谓栈所占据的空间,无非就是栈的起始地址和栈顶标记所在位置之间的距离

例如以下代码

mov ax,2000
mov ss,ax
mov ss,2000mov sp,16
push axmov ax,2233
push ax
push ax
push axpop bx
pop cx
pop dx

这段代码便将栈的起始位置的段地址设置为2000,且将栈顶的偏移地址设置为16,这种情况下,栈中支持存储的字型数据为8个

通常,将栈设定位为16的倍数

4.栈顶越界

当push入栈数据大小或者pop出栈数据大小大于栈顶标记与栈的起始地址所组成的栈空间时,便会发生栈顶越界问题,但汇编语言并不会像其他高级语言那样直接抛出异常和错误

汇编语言在任意时刻,都会将ss:sp所组成的地址认为为栈顶标记

例如以下情况

在这段代码中,可以清楚地看到sp寄存器中的数值减到0后会跳转至FFFE,而这段存储空间所存储的指令或数据我们不得而知,也就是说,在汇编语言中,虽然栈顶越界不会带来直接的异常错误,但如果我们通过push或者pop破坏我们原已有的指令或者数据,也是十分致命的

从以上我们可以看到,SP寄存器的变化范围为0~FFFFH,也就是65536个字节,32768个字型数据,也就是我们原来所说的64KB

5.栈的作用

主要作用

栈的主要作用:临时性地保存数据

在call指令和ret指令中,call转移指令临时地将吓一跳指令所在的地址保存了栈中栈顶位置,再通过ret指令从栈顶将保存的指令拿出

临时作用

  • 用于数据交换
    例:
mov ax,1122
mov bx,3344
push ax
push bx
pop ax
pop bx
mov ax,1000H
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[0]
pop ds:[2]

汇编语言:栈相关知识点相关推荐

  1. html属性 id去重,JS相关知识点总结

    一.获取元素方法 1.document.getElementById("元素id号"); 可以使用内置对象document上的getElementById方法来获取页面上设置了id ...

  2. 并发与多线程相关知识点梳理

    文章目录 并发和并行的概念 如何保证线程安全 1. 数据单线程内可见 2. 只读对象 3. 线程安全类 4. 同步与锁机制 什么是锁 线程同步 引用类型 ThreadLocal LeetCode 相关 ...

  3. c51单片机汇编语言语法错误,单片机汇编语言常见错误知识点分析

    描述 汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的惟一语言.因而对程序的空间和时间要求很高的场合,汇编语言的应用是必不可少的.至于很多需要 ...

  4. redis相关知识点讲解,redis面试题

    redis相关知识点讲解,redis面试题 1. redis基本知识点 1.1 什么是redis? 1.2 redis的key的设计 1.3 redis的value数据类型有哪些? 1.3.1 str ...

  5. 卫星轨道推演计算相关知识点总结(含欧拉角、旋转矩阵、及各坐标系转化等)

    来源:轨道机动算法的C++实现_shirro123的专栏-CSDN博客 卫星轨道推演计算相关基础知识点总结 一.卫星的运动特性             二.卫星的空间坐标系               ...

  6. 水下机器人_相关知识点

    485转232 SP3485的管脚及功能: Pin1.RO    接收器输出 Pin2.RE 接收器输出使能(低电平有效) Pin3.DE 驱动器输出使能(高电平有效) Pin4.DI 驱动器输入 P ...

  7. js 闭包及其相关知识点理解

    本文结合个人学习及实践,对闭包及相关知识点进行总结记录,欢迎读者提出任何不足之处 一.js变量 二.作用域(scope) 三.[[scope]] 和 scope chain 四.作用域(scope)和 ...

  8. Redis:相关知识点纵观

    这篇文章先简单的介绍一下redis有什么相关知识点,然后再从接下去的一些文章对一些重要的知识点进行总结. 一.Redis 是什么 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存 ...

  9. 网络流量队列优先级相关知识点

    网络流量队列优先级相关知识点 Qdisc(quick disconnect)快速分离,断开;是一种排队规则,实现对流量的优先级管理. 涉及随机公平队列,令牌桶过滤器,分层令牌桶,FIFO, /* *C ...

最新文章

  1. 在VMware环境Windows server 2003下测试磁盘阵列实验
  2. change事件判断ajax,jquery中change事件里面if语句失效
  3. (61)分析 KiFindReadyThread 函数 —— 线程优先级
  4. Linux LXR 网站
  5. C/C++[1928, ]日期处理
  6. 根据快手账号的分享链接下载无水印视频,思路
  7. 未来教育计算机一级ms百度云,未来教育全国计算机二级VFP
  8. 二极管三极管电路原理和理解
  9. 联想服务器开机显示英文,在开机自检时,在联想LOGO画面处死机(即自检时死机)...
  10. python爬虫之批量下载小说
  11. 2021/1/26-每日三题第33弹:皮皮虾,我们走 !你知道什么是面向对象编程和面向过程编程吗 ???
  12. 随机梯度下降matlab,matlab随机梯度下降法
  13. 观察者模式的一个例子
  14. U盘装完系统后多出来的EFI盘复原
  15. AT89S51单片机硬件结构
  16. 【流畅的Python学习笔记】2023.4.29
  17. xbox360 功率测试软件,运行游戏164W!Xbox 360功耗早知道
  18. 为什么可以开根号判断素数,求1-100的素数
  19. Android入门-SayHello及其多种实现方法
  20. 【torch.nn.init】初始化参数方法解读

热门文章

  1. 常见胸肌问题解答(一):厚度不够
  2. 推荐一个在线画图网站
  3. FRM适合自学吗?自学有哪些劣势?
  4. 干货 | Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码
  5. 输电线缺陷检测 计算机工程与设计,基于计算机视觉的焊点缺陷检测系统的设计...
  6. 控制情绪和欲望,宁静致远
  7. HACKTHEBOX——Valentine
  8. 光滑函数(smooth function)
  9. 蛋花花分析人工智能靠什么走向大众
  10. 中、高级职称期刊论文发表有些什么要求