Remix.run Logo
gpderetta 2 days ago

Just combining two 16 bit registers for a logical 32 bit address would have been better than the weird partially overlapping addressspace.

rep_lodsb 2 days ago | parent | next [-]

How would you have redesigned the 8086 to do this? And why, other than because of some aesthetic objection to overlapping segments?

The 286 and 386 in protected mode did allow segments with any base address (24 or 32 bits), so your argument about extending the address space doesn't make sense.

gpderetta 2 days ago | parent [-]

you explained elsewhere how the overlap is used for relocatability, which is a reasonable justification. But if that were not a concern, non overlapping segments would have provided for a larger address space. I will readily admit that I'm not aware of all the constraints that lead to the 8086 design.

386 (not sure how 286 works) did extend segments to a larger address space, by converting them to segment selectors, but it requires a significantly more complex MMU as it is a form of virtual memory.

Narishma 2 days ago | parent [-]

> 386 (not sure how 286 works) did extend segments to a larger address space, by converting them to segment selectors

The 286 did that, though they only extended the address space to 24 bits. The 386 extended it again to 32 bits.

wvenable 2 days ago | parent | prev [-]

But then you'd end up wasting memory because the address space it would be divided into 64K blocks. The first PC had only 16KB of RAM but 128KB was probably more common. With the segments setup the way you describe a 128KB machine could use only 2 segment addresses out of 65,536 -- not very efficient or useful for relocating code and data.