Question

I've read that in the days of the Intel 8086 CPU the biggest registers were 16-bits and everyone were looking for a way to access more than 65536 bytes of linear memory but instead of expanding the CPU registers they invented the segment:offset addressing scheme and the way I understand it you're able to "group" two 16-bit registers together into a 32-bit memory address. But the same place I have also read that the CPU could only access 1MB of memory. How does that work? 2^32 equals 4,294,967,296 so I don't understand, please enlighten me :)

Était-ce utile?

La solution

The segment register value is shifted left by 4 (multiplied by 16) and added to the "offset" part of the address address.

16 * 65536 = 1 megabyte.

Autres conseils

Only four more bits (or a four bit register) were actually needed to address up to 1,048,360 bytes ...(65,535 to 1 megabyte) but they had a sixteen bit register available ...and so they used a sixteen bit register instead looking forward to the days when the memory address bus would be expanded to 32 bits. The Intel 8088 had 20 address lines numbered A0-A19 This processor could address 1 Megabyte of memory. FFFFF would be the largest linear address...4 bits per hex digit, 5 digits = 20 address lines.

I think this linear address would require a segment of 000F and an offset of FFFF

8086 has 20bit address line. so the maximum it can address is 2^20 = 1MB. http://en.wikipedia.org/wiki/Intel_8086

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top