【发布时间】:2019-09-28 02:01:56
【问题描述】:
如何从给定的数据中找到段地址?
物理地址 = 0x119B,有效地址 = 0x10AB
公式是什么?
【问题讨论】:
-
“有效地址”是段的偏移部分:偏移地址。你知道如何从 seg:off 计算线性地址,对吧? (如果你不这样做,或者谷歌它)。然后解方程。
标签: assembly x86-16 real-mode memory-segmentation
如何从给定的数据中找到段地址?
物理地址 = 0x119B,有效地址 = 0x10AB
公式是什么?
【问题讨论】:
标签: assembly x86-16 real-mode memory-segmentation
x86 16 位实模式下的有效地址只是 20 位 segment:offset address 的偏移量部分。给您的问题是确定段值与有效地址 0x10AB 结合产生的物理(线性)地址 0x119B。
物理地址可以使用公式physaddr=(segment<<4)+offset 或physaddr=(segment*0x10)+offset 从segment: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.
【讨论】:
seg:off 是 32 位,而不是 20。它表示的线性地址可能只有 21 位,在不截断地址的 CPU 上,并且当 A20 门不截断时t 将地址包装在 CPU“外部”。