CPU如何在实模式下计算20位地址

5

我知道它使用物理地址 = 段寄存器 << 4 + 偏移寄存器。虽然这两个寄存器是16位的,但8086如何处理20位以上的操作?

2个回答

5
总线接口单元由段寄存器、用于生成20位地址的加法器和指令预取队列组成。一旦该地址从BIU发出,指令和数据字节就会从内存中获取,并填充一个先进先出的6字节队列。处理器使用专用的内部20位寄存器“按需”生成这些20位地址。请参阅名为“8086_Internal_Block_diagram_enotes.pdf”的文档,可通过Google轻松找到。还可以查看关于总线接口单元的章节的此文档

1
我明白了,谢谢!因此,实际上地址计算不使用传统的16位ALU(?)。 - Oxdeadbeef
1
@0xdeadbeef:没错,在BIU中有专门的“小ALU”。 - DarkDust

1

当您将一个16位数字向左移动4个位置时,实际上是创建了一个20位数字。然后偏移量指示您将进入该范围的距离。请参见维基百科关于实模式寻址的文章

例如:

0x0001  << 4  ->  0x00010  (5 sets of 4 bits in each hex digit -> 20 bits)

我猜这个问题更多的是:由于所有寄存器都是16位的,处理器如何处理一个20位的值,这个值对于普通寄存器来说太大了。 - DarkDust
@DarkDust 是的,我也是这样理解的。你的回答更完整,我只是试图直接回答问题。 - jonsca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接