当前位置: 首页 > 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"...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...