【问题标题】:Find Segment address from given physical and effective address从给定的物理地址和有效地址中查找段地址
【发布时间】:2019-09-28 02:01:56
【问题描述】:

如何从给定的数据中找到段地址?

物理地址 = 0x119B,有效地址 = 0x10AB

公式是什么?

【问题讨论】:

  • “有效地址”是段的偏移部分:偏移地址。你知道如何从 seg:off 计算线性地址,对吧? (如果你不这样做,或者谷歌它)。然后解方程。

标签: assembly x86-16 real-mode memory-segmentation


【解决方案1】:

x86 16 位实模式下的有效地址只是 20 位 segment:offset address 的偏移量部分。给您的问题是确定段值与有效地址 0x10AB 结合产生的物理(线性)地址 0x119B。

物理地址可以使用公式physaddr=(segment<<4)+offsetphysaddr=(segment*0x10)+offsetsegment:offset 对计算。稍微修改一下公式:

physaddr = (segment*0x10)+offset
physaddr-offset = segment*0x10
(physaddr-offset)/0x10 = segment
segment = (physaddr-offset)/0x10

现在我们知道段的公式是segment = (physaddr-offset)/0x10,我们可以执行计算来找到您问题的答案:

segment = (0x119B-0x10AB)/0x10
segment = 0xF0/0x10
segment = 0xF

我们可以通过将其代入物理地址的原始方程来检查这个结果并得到:

physaddr = (0xF*0x10)+0x10AB = 0x119B.

【讨论】:

  • Michael Petch 首先感谢您的帮助,但亲爱的先生,您正在使用有效地址作为偏移量吗?这是否意味着偏移量 = 有效地址?
  • @DamsazAli 是的,有效地址就是偏移量,我第一句话说x86 16位实模式下的有效地址只是20位段的偏移量部分:偏移地址.
  • nitpick:seg:off 是 32 位,而不是 20。它表示的线性地址可能只有 21 位,在不截断地址的 CPU 上,并且当 A20 门不截断时t 将地址包装在 CPU“外部”。
猜你喜欢
  • 2011-05-11
  • 2021-01-17
  • 2014-09-06
  • 2021-09-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 2015-05-04
  • 2013-05-05
相关资源
最近更新 更多