4
votes

In the 8086 architecture, the memory space is 1 MiB in size and divided into logical segments of up to 64 KiB each.

i.e. it has 20 address lines thus the following method is used:

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

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

1
Not really a programming question - this is just CPU architecture (circa mid 1980s) - the "shift" is handled by the CPU hardware - you don't need to worry about it.Paul R
well, it's a programming question, but the premise is wrong.Alex Brown
@Paul: you are right, but I study the CPU hardware and I didn't see any 20 bit registerMina Fouad
you don't need a 20 bit register - the memory interface logic handles the generation of a 20 bit physical addressPaul R
can I conclude that it's a memory interface issueMina Fouad

1 Answers

6
votes

Address translation is done internally by a special unit without using the registers available to user code to store intermediate results - it just fetches 16-bit values and does the translation inside - it is not reflected anywhere where the user code could observe it.