Article View: comp.arch
Article #21438Re: 8086 design goals (and Pascal)
From: Piercarlo Grandi
Date: Tue, 23 May 1989 13:05
Date: Tue, 23 May 1989 13:05
42 lines
2891 bytes
2891 bytes
In article <31963@sri-unix.SRI.COM> peter@ficc.uu.net (Peter da Silva) writes:
One thing I don't understand in this discussion... what feature of Pascal
made them think no object should ever be larger than 64K? It's this 64K
limit that's the main problem in the 8086 family...
Just a moment; first of all 8086 and 80286 are two different things. Let's
look at the 8086 first: it is a 16 BIT machine. The fact that it has four
segment registers is really like separate I/D spaces in the PDP-11. It is
still a 16 bit machine, only you can address from your program up to 256k,
if you don't care about not being able to have pointers from one space to
another (which is true for pascal, not true for C -- or algol 68 :-> -- where
you can have pointers to globals or locals -- pointers to procs are
different).
You also have a funny banking scheme to address 1M of physical memory, much
like the PDP-11 had in the MMU, but that would be irrelevant to user
programs, except that in real mode they can themselves change the MMU
registers. I know at least one machine (Altos 586) that using an 8086 with
an external, "protected mode" MMU, implements a diabolically fast PDP-11/70
"equivalent", i.e. 64k+64k of addressability per user program. (historical
note: this scheme was also used in the Onyx C8002 with the Z8002).
the segments themselves are a relatively minor problem. Even for 'C'
there's no rule against , or real difficulty with, putting one object
(or at most a few objects) in a segment.
The 80286 is different. It is a 16 bit machine with 32 bit segment descriptors.
Here lies the rub; they are descriptors, not pointers. In particular, the
rings are in the middle of the descriptor, and this makes reinterpreting
the descriptor as a pointer hard, because pointer arithmetic is not easy.
Again, there is no problem for Pascal (no pointer arithmetic) and most
languages, but indeed for C there is some. It is not impossible, and indeed
you have large/huge "models", etc..., but not pleasant.
summary: 8086 is 16 bit, so the 64k limitation is inherent, 80286 is 16+16 bit
(for addresses), so the 64k limitation is still there, even if it could have
been dispensed with if 32 bit address arithmetic had been removed.
--
Piercarlo "Peter" Grandi | ARPA: pcg%cs.aber.ac.uk@nsfnet-relay.ac.uk
Dept of CS, UCW Aberystwyth | UUCP: ...!mcvax!ukc!aber-cs!pcg
Penglais, Aberystwyth SY23 3BZ, UK | INET: pcg@cs.aber.ac.uk
Technical Details
Message-ID:
<970@aber-cs.UUCP>Path:
arc1-ca.pugleaf.net!utzoo!attcan!uunet!mcvax!ukc!dcl-cs!aber-cs!pcgShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!mcvax!ukc!dcl-cs!aber-cs!pcg From: pcg@aber-cs.UUCP (Piercarlo Grandi) Newsgroups: comp.arch Subject: Re: 8086 design goals (and Pascal) Message-ID: <970@aber-cs.UUCP> Date: 23 May 89 13:05:57 GMT Reply-To: pcg@cs.aber.ac.uk (Piercarlo Grandi) Organization: Dept of CS, UCW Aberystwyth (Disclaimer: my statements are purely personal) Lines: 42