当前位置: 首页 > news >正文

寄存器详解(二)

目录

内存中字的存储

示例:

数据段寄存器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指令的完整描述

  1.  SP=SP-2, SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶;
  2.  将寄存器AX 中的内容送入SS:SP指向的内存单元处,SS:SP指向新栈顶;

示例图

 POP AX指令的完整描述

  1. 将SS:SP指向的内存单元处的数据送入寄存器AX中;
  2. SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶;

示例图

 栈顶超界问题

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

示例一:

 示例二:

 上述示例描述了执行push,pop指令时,发生栈顶超界问题,当栈满的时候使用push命令入栈,当栈空时使用pop命令出栈,都将发生栈顶超界问题;

当编程时,要根据可能用到的最大栈空间,安排栈的大小,需要程序员自己担心栈顶超界问题;

相关文章:

寄存器详解(二)

目录 内存中字的存储 示例&#xff1a; 数据段寄存器DS与[address] 字的传送 数据段简介 CPU提供的栈机制 栈段寄存器SS和栈顶指针寄存器SP PUSH AX指令的完整描述 示例图 POP AX指令的完整描述 示例图 栈顶超界问题 示例一&#xff1a; 示例二&#xff1a; 内存中字…...

Java AIO

在Java中&#xff0c;AIO代表异步I/O&#xff08;Asynchronous I/O&#xff09;&#xff0c;它是Java NIO的一个扩展&#xff0c;提供了更高级别的异步I/O操作。AIO允许应用程序执行非阻塞I/O操作&#xff0c;而无需使用Selector和手动轮询事件的方式。 与传统的NIO和Java NIO…...

java集合总结

1.常见集合 Collection List&#xff1a;有序可重复集合&#xff0c;可直接根据元素的索引来访问 Vector-StackArrayListLinkedList Queue&#xff1a;队列集合 Deque-LinkedList、ArrayDequePriorityQueue Set&#xff1a;无序不可重复集合&#xff0c;只能根据元素本身来访问…...

list交并补差集合

list交并补差集合 工具类依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version> </dependency><dependency><groupId>commons-collections&…...

【微信小程序】父组件修改子组件数据或调用子组件方法

一、使用场景 页面中用到了自定义组件形成父子组件关系&#xff0c;在父组件某个特定时期想要操作子组件中的数据或方法&#xff0c;比如离开页面的时候清空子组件的数据。 二、方法 父组件可以通过this.selectComponent方法获取子组件实例对象&#xff0c;这样就可以直接访…...

frp通过nginx映射multipart/x-mixed-replace; boundary=frame流媒体出外网访问

要通过Nginx访问multipart/x-mixed-replace流媒体协议&#xff0c;并通过FRP进行映射访问&#xff0c;你可以按照以下步骤进行操作&#xff1a; 配置Nginx以支持multipart/x-mixed-replace流媒体协议。你需要编辑Nginx的配置文件&#xff08;通常是nginx.conf&#xff09;&…...

Kubernetes概述

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…...

Jmeter教程

目录 安装与配置 一&#xff1a;下载jdk——配置jdk环境变量 二&#xff1a;下载JMeter——配置环境变量 安装与配置 一&#xff1a;下载jdk——配置jdk环境变量 1.新建环境变量变量名:JAVA_HOME变量值&#xff1a;&#xff08;即JDK的安装路径&#xff09; 2.编辑Path%J…...

用Rust实现23种设计模式之建造者模式

当使用 Rust 实现建造者模式时&#xff0c;我们可以通过结构体和方法链来实现。建造者模式是一种创建型设计模式&#xff0c;它允许你按照特定的顺序构建复杂对象&#xff0c;同时使你能够灵活地构建不同的变体。下面是一个使用 Rust 实现建造者模式的示例&#xff0c; 在示例中…...

聚观早报 | 腾讯字节等企业驰援防汛救灾;新能源车7月销量单出炉

【聚观365】8月4日消息 腾讯字节等企业驰援防汛救灾新能源车7月销量成绩单出炉Model Y等车型低温续航衰减严重华为Mate60系列猜想图曝光支付宝做短视频引来羊毛党 腾讯字节等企业驰援防汛救灾 近日&#xff0c;京津冀地区遭遇极端降雨天气&#xff0c;引发洪涝和地质灾害&…...

Crack:CAD Exchanger SDK 3.20 Web Toolkit 应用

在CAD Exchanger SDK 版本 3.20.0中&#xff0c;我们在 Web Toolkit 中包含了绘图、BIM 和 MCAD 查看器的示例&#xff0c;以展示如何使用每个工具可视化数据。这些查看器具有显示不同类型数据的特定功能&#xff0c;允许用户根据自己的需求单独使用它们。我们将继续增强每个查…...

改造 ChatGPT-Next-Web 项目重新生成 Docker 镜像

改造 ChatGPT-Next-Web 项目重新生成 Docker 镜像 0.背景1. 修改代码2. 生成 Docker 镜像3. 上传 Docker 镜像4. 运行 Docker 镜像 0.背景 需要通过 ChatGPT-Next-Web 使用自己搭建的 OpenAI API 兼容的服务器&#xff0c;需要对 ChatGPT-Next-Web 项目的少量代码进行改造。 …...

git修改commit日志

由于公司对版本提交日志进行检查&#xff0c;如果不符合要求&#xff0c;则push失败。 以下是修改commit日志的方法&#xff1a; 1.进入到提交代码文件所在目录&#xff0c;即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时&#xff0c;梯度…...

【JAVA】正则表达式是啥?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言正则表达式正则表达式语法正则表达式的特点捕获组实例 前言 如果我们想要判断给定的字符串是否符合正则表达式的过滤逻辑&#xff08;称作“匹配”&#xff09;&#xff0c…...

网络安全之原型链污染

目录&#xff1a; 目录&#xff1a; 一、概念 二、举例 三、 实操了解 总结 四、抛出原题&#xff0c;历年原题复现 第一题&#xff1a; 五、分析与原理 第二题&#xff1a; 八、分析与原理 九、具体操作&#xff0c;payload与结果 结果&#xff1a; 一、概念 Java…...

【腾讯云Cloud Studio实战训练营】使用Cloud Studio迅捷开发一个3D家具个性化定制应用

目录 前言&#xff1a; 一、腾讯云 Cloud Studio介绍&#xff1a; 1、接近本地 IDE 的开发体验 2、多环境可选&#xff0c;或连接到云主机 3、随时分享预览效果 4、兼容 VSCode 插件 5、 AI代码助手 二、腾讯云Cloud Studio项目实践&#xff08;3D家具个性化定制应用&…...

【计算机网络】第四章 网络层(一)

文章目录 第四章 网络层4.1 网络层概述4.2 网络层提供的两种服务4.2.1 小结 第四章 网络层 网络层是计算机网络体系结构中的一个关键层&#xff0c;位于传输层上方、数据链路层下方。它负责将传输层提供的数据分割成适当大小的数据包&#xff0c;并在不同网络之间进行路由选择和…...

Elasticsearch删除文档

根据id删除 例如删除id为110的文档 DELETE /ffbf/_doc/110返回信息 {"_index" : "ffbf","_type" : "_doc","_id" : "110","_version"...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...