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