在 8086 架构中,内存空间大小为1 Mbyte
,并且分为多个64 Kbytes
的逻辑段。
即。它有 20 地址线,因此使用以下方法:
数据段寄存器向左移位4位,然后加到偏移寄存器
我的问题是:虽然所有寄存器只有16位
,但我们如何进行移位操作答案 0 :(得分:5)
地址转换由一个特殊单元在内部完成,不使用用户代码可用的寄存器来存储中间结果 - 它只是获取16位值并在内部进行转换 - 它不会反映在用户代码可以观察到它的任何地方
答案 1 :(得分:0)
在硬件中,寄存器是翻转触发器的组合,用于存储信息位。
硬件芯片内部可能有数百万个寄存器来存储当前指令,当前状态,值......只有少数寄存器会暴露给存储值的程序。这就是主意。每个架构背后的具体内容都是制造商的秘密,因此您永远不会看到任何关于此的公开文档。
这是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