How is a physical address created in 8086?

In the 8086 architecture, the memory capacity is 1 MB and is divided into logical segments up to 64 KB each.

those. it has 20 address lines, so the following method is used:

That the data segment register is shifted to the left by 4 bits, and then added to the offset register

My question is: how do we perform the shift operation, although all the registers are only 16 bits

+4
source share
2 answers

, , - 16- - , .

+5

- .

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
0

Source: https://habr.com/ru/post/1775399/


All Articles