在8086微处理器中,20位地址分为16位+4位地址,其中4位二进制是段地址。当我们将4位二进制转换为十六进制时,它会变成1位十六进制。我的问题是当我们遇到计算物理地址的问题时从逻辑地址上看,给出的是一个4bit的十六进制段地址。为什么会这样呢?
同样,在计算物理地址时,我们在 lsb 中追加 0 来查找该段的基地址,然后将偏移量添加到其中。附加0背后的逻辑是什么?
一段等于一段。一段等于16个十进制字节或10个十六进制字节。所以段值为89AB
零偏移等于89AB x 10
or 89AB0
(注意:在此上下文中,所有地址均为十六进制).
对于段偏移到 20 位绝对地址的转换示例,最好如下表示:
89AB:F012 -> 89AB -> 89AB0 (paragraph to byte -> 89AB x 10 = 89AB0)
F012 -> 0F012 (offset is already in byte unit)
----- +
98AC2 (the absolute address)
对于绝对地址到段偏移量的转换:
98AC2 -> 9 8AC2 -> 9 -> 9000 -> 9000:8AC2
(split) 8AC2 8AC2
or...
98AC2 -> 98AC 2 -> 98AC -> 98AC -> 98AC:0002
(split) 2 0002
或者可以从中间分开...
98AC2 -> 98 AC2 -> 98 -> 9800 -> 9800:0AC2
(split) AC2 0AC2
以上三个段偏移地址包括89AB:F012
(原始地址值)指向相同的绝对地址(相同的物理位置)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)