寄存器详解(二)
目录
内存中字的存储
示例:
数据段寄存器DS与[address]
字的传送
数据段简介
CPU提供的栈机制
栈段寄存器SS和栈顶指针寄存器SP
PUSH AX指令的完整描述
示例图
POP AX指令的完整描述
示例图
栈顶超界问题
示例一:
示例二:
内存中字的存储
在CPU中,用寄存器存储一个字,高8位存放高位字节,低8位存放低位字节;
在内存中,由于一个内存单元是一个字节,则一个字需要用两个地址连续的内存单元存放,这个字的低位字节存放在低地址单元中,高位字节存放高地址单元;
示例:
假设从0地址处存放数据1,然后从2地址处存放数据2;
数据1:20000 16进制表示:4E20H
数据2:18 16进制表示: 0012H

注:将起始地址为N的字单元简称为N地址字单元,由N号单元和N+1号单元组成;
例如:用0,1两个内存单元存放的数据4E20H称之为4E20H存放于起始地址为0的字单元中;
数据段寄存器DS与[address]
CPU要读写一个内存单元时,必须给出该内存单元的地址,CPU是根据段地址与偏移地址给出物理地址,8086CPU中用DS寄存器存放要访问数据的段地址,而[address]表示内存单元的偏移地址;
question: 如何将内存物理地址为10000H中的数据读取到寄存器AL中?
思考如下: 物理地址为10000H,取段地址为1000H,偏移地址为0000H; 将段地址保存到DS寄存器中,但是8086CPU不支持将数据直接送入段寄存器的操作,考虑一个通用寄存器作为中转;
// mov指令可以完成两种传送
// 1. 将数据直接送入寄存器 2.将一个寄存器中的内容送入另一个寄存器
mov bx,1000H
mov ds,bx
mov al,[0]


字的传送
1. mov ML/MH, [address] 该指令可以使寄存器和内存之间进行字节型数据传送;(M=A/B/C/D)
2. mov MX,[Address] 该指令可以使寄存器与内存之间进行字型数据传送;(M=A/B/C/D)
mOV BX,1000
mov ds,bx
mov ax,[0] //1000:0000处的字型数据送入AX
mov [0],cx //cx中的16位数据送到1000:0000
数据段简介
将一组长度为N(N<=64KB) 地址连续 起始地址为16的倍数的内存单元当做专门存储数据的内存空间,从而定义了一个数据段;
例如: 123B0H - 123B9H 这段内存空间当做数据段使用,取段地址为123BH,长度为10个字节;
CPU提供的栈机制
栈是一种只能在一段进行插入或删除操作的数据结构
栈有两个基本操作:
入栈: 将一个新的元素放到栈顶
出栈: 从栈顶取出一个元素
栈顶元素最后入栈,最先出栈;
8086CPU提供相关指令以栈的方式访问内存空间,这意味着,在基于8086CPU编程时,可以将一段内存当做栈来使用;
8086CPU提供入栈和出栈指令,最基本的两个是PUSH(入栈)和POP(出栈)
- push ax 表示将寄存器AX中的数据送入栈中;
- pop ax 表示从栈顶取出数据送入AX;
注:入栈和出栈的操作都是以字为单位进行
栈段寄存器SS和栈顶指针寄存器SP
question: push ax等入栈指令执行时,要将寄存器中的内容放入栈顶单元的上方,成为新的栈顶元素;pop ax等出栈指令执行时,从栈顶单元要取出数据送入寄存器当中;如何知道哪个单元是栈顶单元?
可以根据栈段寄存器SS和栈顶指针寄存器定位处栈顶单元。
栈段寄存器SS存放栈顶单元的段地址;
栈顶指针寄存器SP存放栈顶单元的偏移地址;
任意时刻,SS:SP指向栈顶元素;
PUSH AX指令的完整描述
- SP=SP-2, SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶;
- 将寄存器AX 中的内容送入SS:SP指向的内存单元处,SS:SP指向新栈顶;
示例图

POP AX指令的完整描述
- 将SS:SP指向的内存单元处的数据送入寄存器AX中;
- SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶;
示例图

栈顶超界问题
question:依靠SS 与 SP 可以保证在入栈和出栈时找到栈顶,但是如何能够保证在入栈和出栈时,栈顶不会超出栈空间?
示例一:

示例二:

上述示例描述了执行push,pop指令时,发生栈顶超界问题,当栈满的时候使用push命令入栈,当栈空时使用pop命令出栈,都将发生栈顶超界问题;
当编程时,要根据可能用到的最大栈空间,安排栈的大小,需要程序员自己担心栈顶超界问题;
相关文章:
寄存器详解(二)
目录 内存中字的存储 示例: 数据段寄存器DS与[address] 字的传送 数据段简介 CPU提供的栈机制 栈段寄存器SS和栈顶指针寄存器SP PUSH AX指令的完整描述 示例图 POP AX指令的完整描述 示例图 栈顶超界问题 示例一: 示例二: 内存中字…...
Java AIO
在Java中,AIO代表异步I/O(Asynchronous I/O),它是Java NIO的一个扩展,提供了更高级别的异步I/O操作。AIO允许应用程序执行非阻塞I/O操作,而无需使用Selector和手动轮询事件的方式。 与传统的NIO和Java NIO…...
java集合总结
1.常见集合 Collection List:有序可重复集合,可直接根据元素的索引来访问 Vector-StackArrayListLinkedList Queue:队列集合 Deque-LinkedList、ArrayDequePriorityQueue Set:无序不可重复集合,只能根据元素本身来访问…...
list交并补差集合
list交并补差集合 工具类依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version> </dependency><dependency><groupId>commons-collections&…...
【微信小程序】父组件修改子组件数据或调用子组件方法
一、使用场景 页面中用到了自定义组件形成父子组件关系,在父组件某个特定时期想要操作子组件中的数据或方法,比如离开页面的时候清空子组件的数据。 二、方法 父组件可以通过this.selectComponent方法获取子组件实例对象,这样就可以直接访…...
frp通过nginx映射multipart/x-mixed-replace; boundary=frame流媒体出外网访问
要通过Nginx访问multipart/x-mixed-replace流媒体协议,并通过FRP进行映射访问,你可以按照以下步骤进行操作: 配置Nginx以支持multipart/x-mixed-replace流媒体协议。你需要编辑Nginx的配置文件(通常是nginx.conf)&…...
Kubernetes概述
Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署(二)ETCD集群部署 Kubernetes高可用集群二进制部署(三)部署…...
Jmeter教程
目录 安装与配置 一:下载jdk——配置jdk环境变量 二:下载JMeter——配置环境变量 安装与配置 一:下载jdk——配置jdk环境变量 1.新建环境变量变量名:JAVA_HOME变量值:(即JDK的安装路径) 2.编辑Path%J…...
用Rust实现23种设计模式之建造者模式
当使用 Rust 实现建造者模式时,我们可以通过结构体和方法链来实现。建造者模式是一种创建型设计模式,它允许你按照特定的顺序构建复杂对象,同时使你能够灵活地构建不同的变体。下面是一个使用 Rust 实现建造者模式的示例, 在示例中…...
聚观早报 | 腾讯字节等企业驰援防汛救灾;新能源车7月销量单出炉
【聚观365】8月4日消息 腾讯字节等企业驰援防汛救灾新能源车7月销量成绩单出炉Model Y等车型低温续航衰减严重华为Mate60系列猜想图曝光支付宝做短视频引来羊毛党 腾讯字节等企业驰援防汛救灾 近日,京津冀地区遭遇极端降雨天气,引发洪涝和地质灾害&…...
Crack:CAD Exchanger SDK 3.20 Web Toolkit 应用
在CAD Exchanger SDK 版本 3.20.0中,我们在 Web Toolkit 中包含了绘图、BIM 和 MCAD 查看器的示例,以展示如何使用每个工具可视化数据。这些查看器具有显示不同类型数据的特定功能,允许用户根据自己的需求单独使用它们。我们将继续增强每个查…...
改造 ChatGPT-Next-Web 项目重新生成 Docker 镜像
改造 ChatGPT-Next-Web 项目重新生成 Docker 镜像 0.背景1. 修改代码2. 生成 Docker 镜像3. 上传 Docker 镜像4. 运行 Docker 镜像 0.背景 需要通过 ChatGPT-Next-Web 使用自己搭建的 OpenAI API 兼容的服务器,需要对 ChatGPT-Next-Web 项目的少量代码进行改造。 …...
git修改commit日志
由于公司对版本提交日志进行检查,如果不符合要求,则push失败。 以下是修改commit日志的方法: 1.进入到提交代码文件所在目录,即git所在目录下 cd app-repository 2.git log git log commit bf29e3e5e799d364fe2975677baf18c9…...
Qt之qml和widget混合编程调用
首先是创建一个widget项目 然后需要添加qml和quick的插件使用 QT quickwidgets qml 接着要在界面上创建一个quickwidget和按钮 创建一个c对象类 QObjectQml #ifndef QOBJECTQML_H #define QOBJECTQML_H#include <QObject> #include <QDebug> class QObjectQml …...
深度学习torch基础知识
torch. detach()拼接函数torch.stack()torch.nn.DataParallel()np.clip()torch.linspace()PyTorch中tensor.repeat()pytorch索引查找 index_select detach() detach是截断反向传播的梯度流 将某个node变成不需要梯度的Varibale。因此当反向传播经过这个node时,梯度…...
【JAVA】正则表达式是啥?
个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言正则表达式正则表达式语法正则表达式的特点捕获组实例 前言 如果我们想要判断给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”),…...
网络安全之原型链污染
目录: 目录: 一、概念 二、举例 三、 实操了解 总结 四、抛出原题,历年原题复现 第一题: 五、分析与原理 第二题: 八、分析与原理 九、具体操作,payload与结果 结果: 一、概念 Java…...
【腾讯云Cloud Studio实战训练营】使用Cloud Studio迅捷开发一个3D家具个性化定制应用
目录 前言: 一、腾讯云 Cloud Studio介绍: 1、接近本地 IDE 的开发体验 2、多环境可选,或连接到云主机 3、随时分享预览效果 4、兼容 VSCode 插件 5、 AI代码助手 二、腾讯云Cloud Studio项目实践(3D家具个性化定制应用&…...
【计算机网络】第四章 网络层(一)
文章目录 第四章 网络层4.1 网络层概述4.2 网络层提供的两种服务4.2.1 小结 第四章 网络层 网络层是计算机网络体系结构中的一个关键层,位于传输层上方、数据链路层下方。它负责将传输层提供的数据分割成适当大小的数据包,并在不同网络之间进行路由选择和…...
Elasticsearch删除文档
根据id删除 例如删除id为110的文档 DELETE /ffbf/_doc/110返回信息 {"_index" : "ffbf","_type" : "_doc","_id" : "110","_version"...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
