80286

80286

Post by Gaijinc » Thu, 02 Nov 2006 01:07:44


I heard that the 80286 had 20 bits in for each address in memory but an
address bus of only 16 bits!

How did I access a memory with this limitation?
 
 
 

80286

Post by Gaijinc » Thu, 02 Nov 2006 01:07:59

I heard that the 80286 had 20 bits in for each address in memory but an
address bus of only 16 bits!

How did I access an address in memory with this limitation?

 
 
 

80286

Post by daytrippe » Thu, 02 Nov 2006 01:20:38


segment register
 
 
 

80286

Post by Gaijinc » Thu, 02 Nov 2006 04:58:14

> >How did I access an address in memory with this limitation?

Can you explain a little bit of what segment register means?

Thanks!
 
 
 

80286

Post by Ian » Thu, 02 Nov 2006 05:02:17

Actually, the 80286 had 24 address lines, and 16 data lines.
Even the 8086 had 20 address lines.
 
 
 

80286

Post by Ian » Thu, 02 Nov 2006 06:35:58

Externally, the 80286 has 24 address lines, but the internal address
register is only 16 bits. This is where the segment register comes
into play. In the 286 the segment register adds 8 significant bits
or 256 segments to the address register. Each segment is 64Kb,
which multiplied by 256 gives the 16Mb address space of the
80286. In a 32 bit processor the segment register is 16 bits which
gives 4Gb of addressing space, (64Kb x 64Kb).

In a 80286 memory dump the address will display like this example:
0043:0100
To the left of the colon is the hex offset value, and to the right
is the hex value of the 16 bit address register - called the offset.
 
 
 

80286

Post by Mike Smit » Thu, 02 Nov 2006 13:28:14


True, although he may be programming in real mode.
 
 
 

80286

Post by Quas.co.u » Sun, 05 Nov 2006 06:06:16


i8086 and i8086 had 20 lines of address some which were multiplexed with data.
also those processors had only 16 bits registers size used particularly for
addressing.
There were 4 registers named segment registers
one for stack one for program code and one for data, and one more additional
to copy data between segments.
So for example if your stack pointer is set to 0x1234,
but stack segment register is set on 0x4000
the address of stack cell in memory looks like this:
segment_register*16+stack_pointer=0x4000*0x10+0x1234=0x41234

i286 and its clones had different implementations
it seams they all had 24 lines address bus.
Only 20 lines of address were accessible in real mode (8086-compliant mode)
The rest to 24 were available in some advanced mode but also with segmentation.

In the OS MS-DOS it became possible to use additional memory (over addressable
20 bit).
To do that application called special driver which switched in that advanced
mode,
copied some part of data the into the addressable space, and switched back.

In I386 it became possible to address in each segment up to 4GB of memory,
and locate in the whole 4GB (32bit) address space,
however some OSes used some bits in the address as flags,
so it was really possible to access only 256MB or 512MB or 1GB or 2GB of memory.

So, I don't know how did you access the memory with these limitations.

--Quas.co.ua