Path: 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 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