如何在8086中生成物理地址?

时间:2010-11-17 11:34:14

标签: x86-16 microprocessors

8086 架构中,内存空间大小为1 Mbyte,并且分为多个64 Kbytes的逻辑段。

即。它有 20 地址线,因此使用以下方法:

  

数据段寄存器向左移位4位,然后加到偏移寄存器

我的问题是:虽然所有寄存器只有16位

,但我们如何进行移位操作

2 个答案:

答案 0 :(得分:5)

地址转换由一个特殊单元在内部完成,不使用用户代码可用的寄存器来存储中间结果 - 它只是获取16位值并在内部进行转换 - 它不会反映在用户代码可以观察到它的任何地方

答案 1 :(得分:0)

在硬件中,寄存器是翻转触发器的组合,用于存储信息位。

register

硬件芯片内部可能有数百万个寄存器来存储当前指令,当前状态,值......只有少数寄存器会暴露给存储值的程序。这就是主意。每个架构背后的具体内容都是制造商的秘密,因此您永远不会看到任何关于此的公开文档。

这是verilog中的简单硬件地址计算器。真正的实现可能要复杂得多

module calc_phys_address(
                            phys_addr,  // Output of the counter
                            clk,        // clock Input
                            segment,    // segment
                            offset      // offset
);
    output reg [20:0] phys_addr;
    input             clk;
    input      [15:0] segment;
    input      [15:0] offset;

    always @(posedge clk)
        phys_addr[20:0] <= {segment[15:0], 4'b0} + offset[15:0];
endmodule