汇编语言:栈相关知识点
文章目录
- 前言
- 一、概念
- 二、栈
- 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]
汇编语言:栈相关知识点相关推荐
- html属性 id去重,JS相关知识点总结
一.获取元素方法 1.document.getElementById("元素id号"); 可以使用内置对象document上的getElementById方法来获取页面上设置了id ...
- 并发与多线程相关知识点梳理
文章目录 并发和并行的概念 如何保证线程安全 1. 数据单线程内可见 2. 只读对象 3. 线程安全类 4. 同步与锁机制 什么是锁 线程同步 引用类型 ThreadLocal LeetCode 相关 ...
- c51单片机汇编语言语法错误,单片机汇编语言常见错误知识点分析
描述 汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的惟一语言.因而对程序的空间和时间要求很高的场合,汇编语言的应用是必不可少的.至于很多需要 ...
- redis相关知识点讲解,redis面试题
redis相关知识点讲解,redis面试题 1. redis基本知识点 1.1 什么是redis? 1.2 redis的key的设计 1.3 redis的value数据类型有哪些? 1.3.1 str ...
- 卫星轨道推演计算相关知识点总结(含欧拉角、旋转矩阵、及各坐标系转化等)
来源:轨道机动算法的C++实现_shirro123的专栏-CSDN博客 卫星轨道推演计算相关基础知识点总结 一.卫星的运动特性 二.卫星的空间坐标系 ...
- 水下机器人_相关知识点
485转232 SP3485的管脚及功能: Pin1.RO 接收器输出 Pin2.RE 接收器输出使能(低电平有效) Pin3.DE 驱动器输出使能(高电平有效) Pin4.DI 驱动器输入 P ...
- js 闭包及其相关知识点理解
本文结合个人学习及实践,对闭包及相关知识点进行总结记录,欢迎读者提出任何不足之处 一.js变量 二.作用域(scope) 三.[[scope]] 和 scope chain 四.作用域(scope)和 ...
- Redis:相关知识点纵观
这篇文章先简单的介绍一下redis有什么相关知识点,然后再从接下去的一些文章对一些重要的知识点进行总结. 一.Redis 是什么 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存 ...
- 网络流量队列优先级相关知识点
网络流量队列优先级相关知识点 Qdisc(quick disconnect)快速分离,断开;是一种排队规则,实现对流量的优先级管理. 涉及随机公平队列,令牌桶过滤器,分层令牌桶,FIFO, /* *C ...
最新文章
- 在VMware环境Windows server 2003下测试磁盘阵列实验
- change事件判断ajax,jquery中change事件里面if语句失效
- (61)分析 KiFindReadyThread 函数 —— 线程优先级
- Linux LXR 网站
- C/C++[1928, ]日期处理
- 根据快手账号的分享链接下载无水印视频,思路
- 未来教育计算机一级ms百度云,未来教育全国计算机二级VFP
- 二极管三极管电路原理和理解
- 联想服务器开机显示英文,在开机自检时,在联想LOGO画面处死机(即自检时死机)...
- python爬虫之批量下载小说
- 2021/1/26-每日三题第33弹:皮皮虾,我们走 !你知道什么是面向对象编程和面向过程编程吗 ???
- 随机梯度下降matlab,matlab随机梯度下降法
- 观察者模式的一个例子
- U盘装完系统后多出来的EFI盘复原
- AT89S51单片机硬件结构
- 【流畅的Python学习笔记】2023.4.29
- xbox360 功率测试软件,运行游戏164W!Xbox 360功耗早知道
- 为什么可以开根号判断素数,求1-100的素数
- Android入门-SayHello及其多种实现方法
- 【torch.nn.init】初始化参数方法解读