第三章 分段机制和逻辑地址

2024-04-25 01:12

本文主要是介绍第三章 分段机制和逻辑地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

寄存器和字长

字长:寄存器的存储的数据宽度
字节:8位
字:16位,2个字节
双字:32位,4个字节
4个字:64位,8个字节

内存访问和字节序

内存和内存访问示意图
内存访问:包括地址,读或者写,数据,字长控制
字长控制:单次读取或卸任8位,16位,32位或64位
低端字节序:高字节位于高地址部分,低字节位于低地址部分

INTEL8086处理器

16位处理器,是整个INTEL32位架构处理器(IA-32)的开山鼻祖。以后的处理器设计,必须保证兼容性

  • 寄存器

    • 8个通用寄存器
      8086的通用寄存器
    • 4个段寄存器
      CS,DS,ES,SS
      当需要在程序中使用两个数据段时,DS指向一个,ES指向一个,默认使用DS
    • 1个IP指令指针寄存器
  • 为什么引入分段机制
    程序必然有代码要要操作的数据,当指令中混杂了数据指令流就不能正常的运行,所以指令和数据要分开存放,分别存放在代码段和数据段,但是如果要使用指令中指定的内存地址当成物理地址(相对于内存起始处的绝对地址)定位数据的位置,因为程序被加载的位置是不固定的,如果使用绝对地址去访问数据会出现访问到错误数据的情况。所以出现了逻辑地址,指令中指定的内存地址是段内偏移地址,处理器提供了两个段地址寄存器CS(代码段寄存器)和DS(数据段寄存器),当指令中出现地址时,会把这个地址当作偏移地址,和DS中的地址相加得到真正的物理地址来访问数据。所以这就保证了,即使代码段和数据段在内存的位置发生了变化,只要把他们的段地址送到CS和DS,程序就能够正常运行。所以程序被加载后,如何正确的设置CS和DS才是重点
    程序加载到内存不同位置

  • 逻辑地址

    • 段地址:段的起始地址
    • 逻辑地址:段地址:偏移地址
    • 段地址和偏移地址示意图
  • 8086的内存分段机制
    8086处理器内部组成框图
    8086提供了20跟地址线,可以访问1M的内存,但是CS和DS都是16位的,偏移地址也是16位的,如何生成20位的物理地址?
    答:段地址起始于能够被16整除的物理内存地址,将这样的内存地址除以16(右移4位)就得到逻辑段地址,将此地址传送到段寄存器,访问内存时,将段寄存器中的逻辑段地址乘以16(左移4位),得到段的起始物理地址(段地址),由于段地址都是16的倍数,所以被称为16字节对齐的。
    1MB内存可以划分为65536个16字节的段

这篇关于第三章 分段机制和逻辑地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933339

相关文章

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了

时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。 NTP 实现什么目的?   目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就有误差,或快或慢的少几秒,时间长了甚至误差过分钟。 NTP 服务器列表 最常见、熟知的就是 www.pool.ntp.org/zo

Spring中事务的传播机制

一、前言 首先事务传播机制解决了什么问题 Spring 事务传播机制是包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。 事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY; 不支持当前事务的:REQUIRES_NEW、NOT_SUPPORTED、NEVER,以及嵌套事务 NESTED,其中 REQUIRED 是默认的事务传播级别。

开启青龙 Ninja 扫码功能失效后修改成手动填写CK功能【修正Ninja拉库地址】

国内:进入容器docker exec -it qinglong bash #获取ninjagit clone -b main https://ghproxy.com/https://github.com/wjx0428/ninja.git /ql/ninja#安装cd /ql/ninja/backend && pnpm install cp .env.example .env

局域网内vue2 配置本地IP地址访问项目

在日常开发中同事可能需要访问你的前端项目,可以通过配置实现通过ip访问 一.首先找到config文件夹目录下的 index.js文件             将此处的host的值修改为0.0.0.0(即 host: 0.0.0.0) // Various Dev Server settings//host: 'localhost' //将localhost进行替换成 0.0.0.0host:

Modbus初学者教程,第三章:modbus寄存器说明

第三章:modbus寄存器说明 寄存器种类 Modbus协议中一个重要的概念是寄存器,所有的数据均存放于寄存器中。Modbus寄存器是指一块内存区域。Modbus寄存器根据存放的数据类型以及各自读写特性,将寄存器分为4个部分,这4个部分可以连续也可以不连续,由开发者决定。寄存器的意义如下表所示。 Modbus协议定义了设备间的数据传输方式,包括数据格式和通信规则。Modbus寄存器是协议中用

女人的逻辑

段子一: “今晚妹子无意间在我电脑的某个文件夹内发现了前女友的照片,死活要和我分手。原因是觉得我前女友巨丑,进而怀疑我眼光,为了避嫌,她决定分手。” 段子二: “一妹子的钥匙弄不见了就去配钥匙,她问师傅:“可以配钥匙吗?”师傅说:“可以可以。”然后师傅看着她,她也看着师傅。良久,师傅忍不住问她:“钥匙呢?”那妹子说:“我有钥匙干嘛还找你

剑指Offer—编程题56(链表中环的入口地址)

题目:一个链表中包含环,如何找出环的入口结点? 解题思路   可以用两个指针来解决这个问题。先定义两个指针P1和P2指向链表的头结点。如果链表中环有n个结点,指针P1在链表上向前移动n步,然后两个指针以相同的速度向前移动。当第二个指针指向环的入口结点时,第一个指针已经围绕着环走了一圈又回到了入口结点。    剩下的问题就是如何得到环中结点的数目。我们在面试题15的第二个相关题目时用到

多头注意力机制(Multi-Head Attention)

文章目录 多头注意力机制的作用多头注意力机制的工作原理为什么使用多头注意力机制?代码示例 多头注意力机制(Multi-Head Attention)是Transformer架构中的一个核心组件。它在机器翻译、自然语言处理(NLP)等领域取得了显著的成功。多头注意力机制的引入是为了增强模型的能力,使其能够从不同的角度关注输入序列的不同部分,从而捕捉更多层次的信息。 多头注意力机