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字节,那么就要在两个或多个数据段中存取数据,这只需要改变数据段寄存器内的段值就可以了。最后,附上段寄存器的引用规定表。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务器探针-serverstatus

{alert type"info"} 之前给大家介绍过一个简单的服务器监控。uptime-kuma 今天给各位带来一个酷炫的多服务器探针和多服务器监控。ServerStatus {/alert} 作者的开源项目地址如下:https://github.com/cppla/ServerStatus 作者的项目体验地址如下 https://…

Unity中 Start和Awake的区别

Awake和Start在Unity中都是MonoBehaviour脚本中的生命周期函数 Awake函数在游戏对象首次被加载时调用,在游戏对象初始化之前调用。 start函数在游戏对象初始化完成后调用,在update第一次执行前调用。 这两个函数在其生命周期内都只会调用一次&#xf…

为什么同样是做测试,别人年薪30W+?我10k!!!

作为一名初出茅庐的软件测试员,职业发展的道路的确蜿蜒曲折,面对一次次的岗位竞争,挑战一道道的面试关卡,一边带着疑惑,一边又要做出选择,只能无奈的感叹:比你优秀的人比你还努力,你…

iPaaS和RPA,企业自动化应该如何选择?

全球著名的咨询调查机构Gartner在2022年初再次发布了《2022年12大技术趋势》报告。 Gartner是全球最具权威的IT研究与顾问咨询公司,成立于1979年,在界定及分析那些决定了商业进程的发展趋势与技术方面,它拥有二十年以上的丰富经验&#xff0c…

【Vue】Vue3 超简单拖拽条动态修改容器宽度

demo 代码 const leftBoxWidth ref(200); // 默认宽度 const leftResize (e: MouseEvent) > {const startX e.clientX;const startWidth leftBoxWidth.value;const mouseMove (documentE: MouseEvent) > {// 80 是左侧菜单宽度leftBoxWidth.value startWidth docu…

深度学习论文解读:比较ResNet和ViT差异

前言 计算机视觉、机器学习,这两个词会让你想到什么? 相信绝大多数人第一反应都是CNN,而持续关注这些领域发展的人,则会进一步联想到近几年大火的Transformer,它不仅在自然语言相关任务上表现优秀,在图像…

HarmonyOS4.0系列——01、下载、安装、配置环境、搭建页面以及运行示例代码

HarmonyOS4.0应用开发 安装编辑器 这里安装windows版本为例 安装依赖 打开DevEco Studio 这八项全部打钩即可开始编写代码,如果存在x,需要安装正确的库即可 开发 点击Create Project 选择默认模板——next Model部分分为Stage和FA两个应用模型&…

JS:给数字添加千分位符(每3位数用逗号隔开)

背景 如果一串数字的长度太长,就不方便阅读,因此可以采用分隔符对数字进行分割本文的分割规则是: 如果数字的长度大于等于5则进行分割,每3位数用逗号分割开 解决 数字可以分为:number类型的数字和字符串类型的数字&…

作为电子信息工程的学生,学完stm32后,是应该学fpga还是Linux?

作为电子信息工程的学生,学完stm32后,是应该学fpga还是Linux? 我自己也是电子信息工程专业出身,FPGA和Linux都是我们大三的专业课,都学过基础也做了基础 的项目,我自己的选择是Linux。最近很多小伙伴找我&#xff0c…

汽车制造领域中的3D测量仪,您了解多少?

在汽车制造领域中,3D测量仪可以满足各种不同的测量需求,被广泛应用于各种零部件和整车的测量、检测及质量控制,为汽车制造的质量控制和精度提高提供了重要的保障。 在汽车设计阶段,3D测量仪可以精确测量车身、引擎盖、车门等零部…

主播个人风格定位

—、外观风格 主播的外观风格是给观众的第一印象,它决定了主播在观众心中的形象和定位。以下是一些常见的外观风格类型: 1.时尚型:主播穿着时尚、前卫,通常以潮流、新颖的形象出现在观众面前。 2.清新自然型:主播穿着简单、舒适,给人一种自…

亚马逊卖家售后管理做得好,差评投诉不见了!一文分享售后管理技巧

对于亚马逊卖家而言,把产品卖出去之后并非一劳永逸,往往都会涉及到售后服务,即使卖家发出了货物且收到了付款,买家也可能申请售后退货退款。售后服务是亚马逊卖家成功的关键之一,这不仅仅影响着买家的购买体验&#xf…

如何找到自己的兴趣和擅长,并以此为职业?

说起热爱,擅长,兴趣,职业这些词,我是一贯的主张:人活着不容易,干点自己喜欢的不香吗。 但是.....一定要注意这个但是...... 什么是兴趣? 三分钟热度算不算?不能养家糊口的算不算&…

2024年全网最全的Jmeter教程:jmeter_BeanShell脚本通过BeanShell进行加解密方法

BeanShell脚本 BeanShell简介: BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些 语法和方法; BeanShell是一种松散类型的脚本语言; BeanShell是用Java写成的,一个小型的、免费的、可以下载、嵌入式的 Ja…

信息机房监控系统(动环辅助监控系统)

信息机房监控系统是一个综合性的系统,用于对机房的所有设备及其环境进行集中监控和管理。这种系统主要针对机房的各个子系统进行监控,包括动力系统、环境系统、消防系统、保安系统、网络系统等。 依托电易云-智慧电力物联网,以下是信息机房监…

外卖小程序系统:数字化时代餐饮业的技术奇迹

在当今数字化时代,外卖小程序系统正以其强大的技术背后支持,成为餐饮业务的一项奇迹。这个系统不仅提供了便捷的点餐体验,更通过先进的技术手段,实现了高效订单处理、智能推荐以及实时配送追踪。下面,我们将深入探讨外…

Java 开源重试类 guava-retrying 使用案例

使用背景 需要重复尝试执行某些动作&#xff0c;guava-retrying 提供了成型的重试框架 依赖 <dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>${retrying.version}</version>…

如何在Linux以docker-compose方式快速部署运行StackEdit,并实现公网访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器&#xff0c;在GitHub上拥有20.7k Star&#xff01;&#xff0c;它支持将Markdown笔记保…

考情实况系列:把控考场节奏,从容拿下Datacom HCIE认证

大家好&#xff0c;我是誉天的数通学员&#xff0c;前段时间刚刚通过了HCIE认证考试&#xff0c;这里给大家分享一下我的考试经验与心得&#xff0c;希望对大家有所帮助。 我预约的是11月3日的杭州考场&#xff0c;考试前一天我就到了杭州&#xff0c;在中医药大学地铁站边上的…

C# Onnx DIS高精度图像二类分割

目录 介绍 效果 模型信息 项目 代码 下载 介绍 github地址&#xff1a;https://github.com/xuebinqin/DIS This is the repo for our new project Highly Accurate Dichotomous Image Segmentation 对应的paper是ECCV2022的一篇文章《Highly Accurate Dichotomous Imag…