8086中的物理地址是如何产生的?

2023-12-15

In the 8086架构中,内存空间大小为 1 MiB,并分为每个最大 64 KiB 的逻辑段。

即它有20地址线因此使用以下方法:

数据段寄存器左移4位然后添加到偏移寄存器

我的问题是:尽管所有寄存器都只有 16 位,但我们如何进行移位操作


地址转换由特殊单元在内部完成,而不使用用户代码可用的寄存器来存储中间结果 - 它只是获取 16 位值并在内部进行转换 - 它不会反映在用户代码可以观察到的任何地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

8086中的物理地址是如何产生的? 的相关文章

  • 实模式 BIOS 例程和保护模式

    我正在做一些操作系统实验 到目前为止 我的所有代码都利用实模式 BIOS 中断来操作硬盘和软盘 但是一旦我的代码启用了CPU的保护模式 所有实模式BIOS中断服务程序将不可用 如何读写硬盘和软盘 我现在需要做一些硬件驱动程序吗 我该如何开始
  • DOSBox 上的 8086 程序集: idiv 指令有错误?

    我正在帮助我的一个朋友调试他的程序 我们将其范围缩小到甚至在这里出现的问题 MODEL small STACK 16 CODE start mov ax 044c0h mov bl 85 idiv bl exit mov ax 4c00h
  • 为什么 32 位处理器只能寻址 4GiB 内存,即使字大小很大?

    Until now I thought that a 32 bit processor can use 4 GiB of memory because 232 is 4 GiB but this approach means process
  • 引导扇区编程中的无限跳转有什么用

    我正在读一本关于如何构建操作系统的书 我浏览了这段代码 所有代码所做的就是打印 hello 但我想了解更多关于无限跳转的信息 mov ah 0x0e mov al H int 0x10 mov al e int 0x10 mov al l
  • 用 DOS 显示数字

    我的任务是编写一个程序来显示我的线性地址 程序的PSP 我写了以下内容 ORG 256 mov dx Msg mov ah 09h DOS WriteStringToStandardOutput int 21h mov ax ds mov
  • C语言中如何显示某些变量的起始地址?

    include
  • 如何通过C代码从绝对地址读取值

    我想读取存储在绝对值已知的地址处的值 我想知道我怎样才能实现这一目标 例如 如果一个值存储在 0xff73000 处 那么是否可以通过C代码取出这里存储的值呢 提前致谢 两种方式 1 将地址文字转换为指针 char value char 0
  • IDIV 汇编语言的问题

    CX 等于 14 AX 等于 16 IDIV CX 但 ALL 中的某个地方有 37 个 该行之前没有任何错误或错误 我哪里做错了 谢谢你 附注在Emu8086上写 IDIV CX除 32 位值DX AX by CX 并将商存储在AX和剩余
  • INT 21h 不打印

    我想知道为什么这个程序不打印 print push ax push bx push dx mov ah 02h ciclo mov al si int 21h inc si loop ciclo pop dx pop bx pop ax r
  • 我们可以检查一个指针以确保它是一个有效的地址吗?

    我的想法是打印它指向的对象 我认为一个有效的指针应该有一个有效的对象 如果我们尝试打印出对象 我们会验证指针是否有效 我对吗 我认为一个有效的指针应该有一个有效的对象 是的 这就是有效指针的定义 如果我们尝试打印出对象 我们会验证指针是否有
  • 使用通过参数传递的偏移量计算过程内部数组的长度,汇编语言 x8086

    所以我试图通过使用参数中的偏移量来获取数组的长度 但它只返回 lenhof 偏移量 我有什么办法可以做到这一点吗 INCLUDE Irvine32 inc multiply proto arr ptr dword data array dw
  • 逻辑地址和物理地址之间的区别?

    我正在阅读 操作系统概念 现在正在读第 8 章 不过 我可以做一些澄清 或者保证我的理解是正确的 逻辑地址 根据书中所述 逻辑地址是由CPU生成的 这到底是什么意思 在执行生成的地址系统中 我假设当为程序编译代码时 该程序具有no知道代码将
  • MemorySharp 设置地址偏移量不起作用

    好的 我正在使用MemorySharp用于读取 写入游戏内存的库 我的问题是 当我尝试将偏移量添加到基指针地址时 Visual Studio 在运行时会引发错误 这是基本代码 using var m new MemorySharp Appl
  • 如何从结构体的成员地址获取结构体的起始地址

    在C语言中 如何从结构体的成员地址获取结构体的起始地址 struct type1 int member1 struct type1 obj1 And ptr1是会员的地址member1 in obj1 如何定义 macro define s
  • 打印Python变量的内存地址[重复]

    这个问题在这里已经有答案了 如何在 Python 2 7 中打印变量的内存地址 我知道 id 返回变量或对象的 id 但这不会返回我期望看到的内存地址的预期 0x3357e182 样式 我想做类似的事情print x 例如 其中 x 是 C
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • 汇编基础知识:输出寄存器值

    我刚刚开始学习汇编语言 我已经陷入了 在屏幕上显示存储在寄存器中的十进制值 的部分 我使用 emu8086 任何帮助将不胜感激 model small Specifies the memory model used for program
  • 使用 Turbo C 编译并链接到 .com 文件

    我正在尝试使用 Turbo C 编译器和链接器编译一个简单的程序并将其链接到 DOS com 文件 我尝试了我能想到的最简单的 C 程序 void main Turbo C 链接器中是否有链接到 com 文件的命令行参数 我从链接器收到的错
  • 为什么 Go 禁止取 (&) 映射成员的地址,却允许取 (&) 切片元素?

    Go 不允许获取地图成员的地址 if I do this p mm abc Syntax Error cannot take the address of mm abc 理由是 如果 Go 允许使用此地址 那么当地图后台存储增长或缩小时 该
  • 16 位模式下的操作数大小前缀

    我试图理解 GAS 的行为 code16 从手册上看 在16位部分 对于32位操作数或指令 会产生66H操作数覆盖前缀用于指令编码 这是否意味着 code16 movw eax ebx 这种模式合法吗 那么代码不能在16位处理器上运行吗 这

随机推荐

  • 你可以将 UITabBarController 推入 UINavigationController 中吗

    是否无法将 UITabBarController 推入 UINavigationController 中 我在旧版本的 iOS 中读过 但现在情况仍然如此吗 简而言之 是的 你可以 但仅仅因为你可以 并不意味着你应该这样做 这UITabBa
  • Django 中的导航

    我刚刚在 django 中完成了我的第一个小 web 应用程序 我喜欢它 我即将开始将旧的 PHP 生产站点转换为 django 作为其模板的一部分 有一个导航栏 在 PHP 中 我在模板代码中根据当前 URL 检查每个导航选项的 URL
  • 按时间或运行总和进行缓冲以进行反应式扩展

    我对反应式扩展相当陌生 想要根据时间缓冲流 或者根据不超过阈值的运行总和 每个项目的大小由 lambda 指定 以先发生者为准 就像现有的Buffer按计数或时间 目前我已经编写了自己的实现Buffer方法按预期工作 使用ISchedule
  • 使用 .htaccess 附加参数

    我正在努力处理 htaccess 重写命令 我拥有的是 RewriteCond HTTP HOST www mywebsite co uk RewriteCond REQUEST URI subfolder RewriteRule subf
  • D3.js:根据值更改条的颜色[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我一直在尝试 d3 js 条形图 我想根据 y 轴的值更改颜色 如何实现这一点 我尝试添加线性渐变 但后来我失去了对它的控制 我正在编写的代码基于此 http bost ocks
  • 切片和数组有什么区别?

    为什么两者都是 u8 and u8 3 在这个例子中好吗 fn main let x u8 1u8 2 3 println x let y u8 3 1u8 2 3 println y 事实是 T n 可以强迫 T 这是让他们可以忍受的方面
  • 无法使用 PHP 执行多个 MariaDB 查询

    我在 MariaDB 中执行 SQL 查询时遇到了一个小问题 所有 PHP 变量都不为空 我想同时执行两个查询 在 MySQL 中它可以工作 但在 MariaDB 服务器中我不能 因为我收到错误 我有一个查询 UPDATE users SE
  • 如何使用vb.net表单删除MS Access数据库的记录以及如何使用vb.net表单进入受密码保护的数据库

    我是 vb net 的新手 而且还是一名学生 我创建了一个表单来在 vb net 中输入学生注册详细信息 以满足教育需求 我使用 MS Access 2010 创建了一个数据库并将其链接到我的 vb 表单 它工作正常 我可以通过 vb ne
  • C# 有 Handles 关键字吗?

    Protected Sub Menu1 MenuItemClick ByVal sender As Object ByVal e As System Web UI WebControls MenuEventArgs Handles Menu
  • 累积和的条件计数数据框 - 循环列

    我试图根据每个值的符号在数据帧内重置来计算累积和 这个想法是对每一列分别进行相同的练习 例如 假设我有以下数据框 df pd DataFrame A 1 1 1 1 1 1 1 1 1 1 1 1 B 1 1 1 1 1 1 1 1 1 1
  • Flutter(Dart):渲染引起的异常/RenderFlex溢出

    我遇到 Flutter Dart RenderFlex 像素溢出问题 渲染库的一个例外 如何管理或应用滚动功能到我的应用程序页面视图 并避免 Flutter 的渲染异常 并显示以下消息 RenderFlex 底部溢出了 28 个像素 如果您
  • 如何编写单个 LINQ to XML 查询来迭代所有子元素以及子元素的所有属性?

    我正在开发 asp net 移动应用程序 我使用 XML 作为数据库 我正在 net 中使用 LINQ to XML 查询 XML 以访问所需的元素和属性 我的 XML 文件中有以下部分
  • Vim 中 Tab 键 == 4 个空格并在大括号后自动缩进

    我该如何制作vi Vim永远不要使用制表符 将空格转换为制表符 不好 使制表符键 4 个空格 并在大括号块后自动缩进代码 例如Emacs does 另外 如何保存这些设置 这样我就不必再次输入它们 我见过与此相关的其他问题 但它似乎总是与我
  • Jmeter是否支持客户端javascript

    Jmeter是否支持客户端javascript 我能够录制脚本 但重播日志没有显示任何内容 JMeter 不是一个浏览器 它是一个负载生成工具 它可以产生 HTTP 流量 但它实际上并不解析 执行加载页面附带的 JavaScript 如果您
  • 在 Switch Case 中声明 UI 对象

    我读过有关开关盒范围的内容 跳转标签等等 但是 SO 这里建议的解决方案似乎意味着添加花括号可以避免这个问题 然而 这似乎仍然不起作用 switch objectType case label label is an integer con
  • 删除NiFi中的空属性

    因为这个问题仍未解决 我有一个EvaluateJsonPath有时输出带有空字符串的属性的处理器 是否有直接的方法从流程文件中删除属性 我尝试使用UpdateAttributes处理器 但它只能根据匹配属性名称进行删除 我需要匹配属性的值
  • 类的事件监听器?

    我有一个引用 Id 的 EventListener 它运行良好 唯一的问题是我至少有十几个需要引用此 EventListener 的地方 所以我不想有十几个完全相同但具有不同 Id 的脚本 有没有办法让 EventListener 引用一个
  • 如何在谷歌地图上显示浮动视图,就像谷歌地图中的搜索栏一样

    我已经成功实现了地图 但我找不到任何与此相关的帮助 这是我对谷歌地图片段的实现 SupportMapFragment fragment private GoogleMap map FragmentManager fm Override pu
  • 将 UTF8 转换为 std::wstring 的跨平台方法 [重复]

    这个问题在这里已经有答案了 可能的重复 STL 中 UTF8 与宽字符的转换 我知道如何使用将 UTF8 转换为 std wstring多字节到宽字符 std wstring utf8to16 const char src std vect
  • 8086中的物理地址是如何产生的?

    In the 8086架构中 内存空间大小为 1 MiB 并分为每个最大 64 KiB 的逻辑段 即它有20地址线因此使用以下方法 数据段寄存器左移4位然后添加到偏移寄存器 我的问题是 尽管所有寄存器都只有 16 位 但我们如何进行移位操作