8086/8088 存储器分段概念

8086/8088 存储器分段概念

    这一节主要讲述8086/8088 存储器分段的概念。

目的

    从8086 CPU开始采用了分段的方法管理存储器,只有充分理解存储器分段的概念和存储器逻辑地址和物理地址的关系,才能有助于我们掌握8086/8088汇编语言。

存储器分段的原因

    在此之前,我假设大家都理解存储地址以及大端小端的概念。如上图所示为存储器的示意图。那么为什么要引入分段的概念。

    其实,8086/8088引入存储器的分段是有原因的。我们都知道8086/8088 CPU有20根地址线,这样可以直接寻址的物理地址空间为1M字节(存储单元以字节为单位),范围是00000H至FFFFFH。但是我在前一节介绍中说到8086/8088 CPU的寄存器都是16位,那么在传输地址时显然一次只能传输16位有效地址,也就是只足够访问64K字节地址空间。为了实现寻址1M字节物理空间,8086/8088引入了分段的概念。

存储器分段的概念
    所谓分段,就是可以根据需要把1M字节地址空间划分为若干逻辑段。每个逻辑段必须满足如下两个条件:
      1. 逻辑段的开始地址必须是16的倍数,因为段寄存器长为16位;
      2. 逻辑段的最大长度为64K,因为指针寄存器长为16位。

    那么1M字节地址空间最多可划分成64K个逻辑段,最少也要划分成16个逻辑段。逻辑段与逻辑段可以相连,也可以不相连,还可以部分重叠。

    这种存储器分段的方法不仅有利于实现寻址1M字节空间,而且也十分有利于对1M字节存储空间的管理。如下图所示为存储器逻辑段的一种划分。

存储地址形成
    要访问某个存储单元,根据我们划分的逻辑段,计算存储单元的地址与所在段的起始地址的差值,称段内偏移(简称偏移)。

    在整个1M地址空间中,存储单元的物理地址等于段起始地址加上段内偏移。物理地址计算公式如下所示:

          物理地址 = 段值 * 10H + 段内偏移

    举个例子:用16进制表示的逻辑地址1234:3456H所对应的存储单元的物理地址为12340H+3456H=15796H。

    其中,段值由段寄存器给出,段内偏移可由指令指针IP、堆栈指针SP和其他可作为存储器指针使用的存储器(SI、DI、BX和BP)给出,段内偏移还可以直接用16位数给出。

段寄存器的使用

    当然,段寄存器的使用也是有规定的。在8086/8088 CPU中有四个段寄存器,可以保存四个段值,但这四个段分工不同。如下图所示为段和段寄存器的引用。

  • 在取指令时,CPU会自动引用代码段寄存器CS,再加上由IP所给出的16位段内偏移,得到要取指令的物理地址。
  • 当涉及堆栈操作时,CPU会自动引用堆栈段寄存器SS,再加上由SP所给出的16位段内偏移,得到堆栈操作所需的物理地址。
  • 当段内偏移涉及BP寄存器时,缺省引用的段寄存器也为堆栈段寄存器SS。
  • 在一般数据存取的情况下,则自动选择数据段寄存器DS或附加段寄存器ES,再加上16位偏移,得到存储器操作数的物理地址。此时的16位偏移有多重可能性,取决于指令的寻址方式,下一节将会讲到。

   

    通常如果整个程序不超过64K字节,那么使用1个64K字节的段就可以了;如果程序的数据区长度超过64K字节,那么就要在两个或多个数据段中存取数据,这只需要改变数据段寄存器内的段值就可以了。最后,附上段寄存器的引用规定表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/152688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS Pro微课1000例】0033:ArcGIS Pro处理cad数据(格式转换、投影变换)

文章目录 一、cad dwg转shp1. 导出为shp2. cad至地理数据库3. data interoperability tools二、shp投影变换一、cad dwg转shp 1. 导出为shp 加载cad数据,显示如下: 选择需要导出的数据,如面状,右键→数据→导出要素: 导出要素参数如下,点击确定。 导出的要素不带空间参…

shell编程规范与变量

目录 一、shell的作用和规范 1.shell的作用 2.shell的执行顺序 3.shell的格式 4.执行shell脚本 1.直接调用shell解释器加上脚本的名字 2.路径加脚本名 绝对路径或相对路径 脚本文件需要有执行权限 3.直接运行 4.其他执行 5.执行环境 二、脚本的错误方…

Java学习day14:权限修饰符,集合(知识点+例题详解)

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!) 往期回顾 Java学习day13:泛型&…

Ajax基础(应用场景|jquery实现Ajax|注意事项)

文章目录 一、Ajax简介二、基于jquery实现Ajax三、使用Ajax注意的问题1.Ajax不要与form表单同时提交2.后端响应格式问题3、使用了Ajax作为请求后的注意事项 一、Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。…

使用Pytorch测试cuda设备的性能(单卡或多卡并行)

以下CUDA设备泛指NVIDIA显卡 或 启用ROCm的AMD显卡 测试环境: Distributor ID: UbuntuDescription: Ubuntu 22.04.3 LTSRelease: 22.04Codename: jammy 1.首先,简单使用torch.ones测试CUDA设备 import torch import timedef cuda_benchmark(device_id…

ubuntu18.04 terminal打不开的解决方法

目录 现象解决 现象 打开terminal时,一直转圈,然后消失,总是打不开terminal. 解决 编辑文件sudo vim /etc/default/locale,修改为 # File generated by update-locale LANG"en_US.UTF-8" LANGUAGE"en_US:en"重启系统,问题解决.

Python爬虫技术系列-03/4flask结合requests测试静态页面和动态页面抓取

python构建web服务 flask内容参考:Flask框架入门教程(非常详细) flask安装与运行测试 安装flask pip install flask创建一个webapp.py文件,内容如下 from flask import Flask# 用当前脚本名称实例化Flask对象,方便flask从该脚…

OpenHarmony Axios组件使用过程中,Api9不适配问题

大家好,我是【八戒,你又涨价了哎】 以下是我个人在学习OpenHarmony过程中的分享,请大家多多指教 目录 问题描述 解决方法 问题描述 使用axios组件的时候,把应用部署到开发板,提示Api9不适配 解决方法 对这类版本不…

机器学习模型超参数优化最常用的5个工具包

优化超参数始终是确保模型性能最佳的关键任务。通常,网格搜索、随机搜索和贝叶斯优化等技术是主要使用的方法。 今天分享几个常用于模型超参数优化的 Python 工具包,如下所示: scikit-learn:使用在指定参数值上进行的网格搜索或…

leetcode每日一题31

搜索旋转排序数组 那……二分法呗 数组中的数可以相同 比 33. 搜索旋转排序数组 多了一个「有重复元素」,导致无法根据 num > nums[0] 来判断 num 在哪一半,比如 [1,1,1,1,1,2,1,1,1] 旋转数组两头相等,元素 1 可能在左半边可能在右半边 …

vue2 - SuperMap3D加载基于Nginx服务生成的3DTileset模型切片服务地址

文章目录 🍍开发环境🍉1:nginx发布3Dtileset模型切片服务🍍1.1:准备3DTileset文件🍍1.2:安装nginx服务,配置相关文件1.2.1:下载nginx1.2.2:下载完解压文件如下1.2.3:将3Dtileset模型文件放置 nginx-1.24.0/html/gc 新建文件中如下:1.2.4:配置nginx服务🍉2:…

基于Docker的安装和配置Canal

基本介绍 Canal介绍:Canal 是用 Java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件(数据库同步需要阿里的 Otter 中间件,基于 Canal)。 Canal背景:阿里巴巴 B2B 公司,因为…

AI绘画使用Stable Diffusion(SDXL)绘制三星堆风格的图片

一、前言 三星堆文化是一种古老的中国文化,它以其精湛的青铜铸造技术闻名,出土文物中最著名的包括青铜面具、青铜人像、金杖、玉器等。这些文物具有独特的艺术风格,显示了高度的工艺水平和复杂的社会结构。 青铜面具的巨大眼睛和突出的颧骨&a…

【Web】Ctfshow Nodejs刷题记录

目录 ①web334 ②web335 ③web336 ④web337 ⑤web338 ⑥web339 ⑦web340 ⑧web341 ⑨web342-343 ⑩web344 ①web334 进来是一个登录界面 下载附件,简单代码审计 表单传ctfshow 123456即可 ②web335 进来提示 get上传eval参数执行nodejs代码 payload: …

【力扣面试经典150题】(链表)K 个一组翻转链表

题目描述 力扣原文链接 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只…

面试题:设置view点击事件不回调的几种方式和原理

如何设置view 点击事件不回调,如何实现?有什么区别? setEnabled(false) 这个方案用于设置view是否可以响应用户的其他交互事件如触摸,轨迹球等。 setClickable(false) 这个方法用于设置view是否可以响应用户的点击事件。 set…

技术分享 | 如何写好测试用例?

对于软件测试工程师来说,设计测试用例和提交缺陷报告是最基本的职业技能。是非常重要的部分。一个好的测试用例能够指示测试人员如何对软件进行测试。在这篇文章中,我们将介绍测试用例设计常用的几种方法,以及如何编写高效的测试用例。 ## 一…

vue和uni-app的递归组件排坑

有这样一个数组数据,实际可能有很多级。 tree: [{id: 1,name: 1,children: [{ id: 2, name: 1-1, children: [{id: 7, name: 1-1-1,children: []}]},{ id: 3, name: 1-2 }]},{id: 4,name: 2,children: [{ id: 5, name: 2-1 },{ id: 6, name: 2-2 }]} ]要渲染为下面…

java算法学习索引之二叉树问题

一 分别用递归和非递归方式实现二叉树先序、中序和后序遍历 用递归和非递归方式,分别按照二叉树先序、中序和后序打印所有的节点。我们约定:先序遍历顺序为根、左、右;中序遍历顺序为左、根、右;后序遍历顺序为左、右、根。 递…