我可以将地址计算Segment:Offset
为Segment
* 0x10 + Offset
。但是我如何计算相反的呢?
例如,我如何从0xF4170
toF400:0170
和 from 0xACF04
to 到达ABCD:1234
?
我可以将地址计算Segment:Offset
为Segment
* 0x10 + Offset
。但是我如何计算相反的呢?
例如,我如何从0xF4170
toF400:0170
和 from 0xACF04
to 到达ABCD:1234
?
您将需要具有开始的基址或偏移量以及线性地址,因为多个Segment:Offset
对可以映射到相同的线性地址。
所以如果我们有段0xF400
和线性地址0xF4170
,我们得到的偏移量0xF4170 - (0xF400 << 4)
是0x170
。
只知道线性地址并没有唯一的解决方案,因此您必须选择将 20 位地址拆分为 16 字节对齐seg
部分和字节偏移的约定。一种可能的功能是:
Segement = linear >> 4
(前 16 位)offset = linear & 0x0F
(低 4 位)您可以选择 12:8 位的规范形式,为将来扩展更宽的线性地址留出空间。