8086中的物理地址与逻辑地址

2024-12-23 14:52:41
推荐回答(4个)
回答1:

“对物理地址来说,当段地址变化时,只要对其偏移量进行相应的调整就可对应同一个物理地址,所以,同一个物理地址可有多个逻辑地址。”
写书的人真欠揍。。。

他既然这么写了,我们就用数学的办法解释一下。
设段地址为x, 偏移地址为y。于是,
逻辑地址是给人看的。它记为(x, y)。由段地址和偏移地址两个数组成。
物理地址是给电脑看的。它记为A = 16 x + y。它根据段地址和偏移地址确定实际的地址。

所以:
设有两个逻辑地址(x1, y1)和(x2, y2)。只要满足16 x1 + y1 = 16 x2 + y2,我们就说这两个逻辑地址对应了同一个物理地址。
0218H = 0200H + 18H
0218H = 0210H + 08H
就是这样。

为什么用两个数存地址呢?因为实际的地址是20位的,而我们一般存数都是16位的,不够用。所以祖先们想了一个办法,就是存两个16位的数,最后用的时候把它们拼在一起。就用16x + y的公式拼。于是乎这两个数就叫做“逻辑地址”,算完之后就叫做“物理地址”。

回答2:

有...有逻辑地址这种说法么x.x...?

这么说并不很严格,不过这么理解也没什么大问题:8086寄存器和即时数最大长度只有16位,对于20位的物理地址必须用两个16位整数组合而成。但是两个16位首尾相接组成32位显然浪费,所以最后就变成了其中一个整数*16+另外一个整数的处理方法。第一个整数就是所谓的段地址。因为两个地址有一部分是重合的,所以就存在两种不同组合的结果是同一个物理地址的情况。

---

物理地址就是物理地址,8086一般完全映射给内存而已;并不一定给用于储存器,比如游戏机的手柄状态一般也会映射给物理地址。

更正,8086也没完全映射给内存... 迷糊了x.xb

回答3:

不少书的确是很迷惑新手
物理地址(实际内存地址)= 段地址*16 + 偏移地址
就TM这么简单
1*16 + 0 和 0*16 + 16结果是一样的。好比三个苹果和两个梨价钱一样。

回答4:

假设要得到结果为10 的话,
1+9=10;
2+8=10;
3+7=10;
......
.....
前面的是段地址,后面是偏移,当然前提是,程序指针能够装下偏移。