It was thus said that the Great Fred Cisin once stated:
On 22 May 2016 at 04:52, Guy Sotomayor Jr <ggs at
shiresoft.com> wrote:
Because the 808x was a 16-bit processor with 1MB
physical addressing. I
would argue that for the time 808x was brilliant in that most other 16-bit
micros only allowed for 64KB physical.
Whether 8088 was an "8 bit" or "16 bit" processor depends heavily on
how
you define those.
Or, you could phrase it, that the 8 bit processors at the time handled
64KiB of RAM. The 808x still could see only 64KiB at a time, but let you
place that 64kiB almost anywhere that you wanted in a total RAM space of
1MiB, and let you set 4 "preset" locations (CS, DS, SS, ES). There were
some instructions, such as MOV, that could sometimes operate with 2 of
those presets.
Thus, they expanded a 64KiB RAM processor to 1MiB, with minimal internal
changes.
To further explain this. The 8086 (and 8088) was internally a 16-bit CPU.
Since you could only address 64K, Intel used four "segment" registers to get
around this limit. The four registers are CS, DS, ES and SS, and were the
upper 16 bits of the 20-bit address [1]. A physical address was calculated
as:
+--------+--------+
| 16-bit segment |0000
+--------+--------+
+--------+--------+
+ 0000| 16-bit offset |
+--------+--------+
=========================
+----+--------+--------+
| 20-bit physical addr |
+----+--------+--------+
Instructions were read from CS:IP (CS segment, IP register), most reads
and write to data sent to DS:offset, with some exceptions. Pushes and pops
to the stack went to SS:SP and reads/writes with the BP register also used
the SS segment (SS:BP). The string instructions used DS:SI as the source
address and ES:DI as the destination address. And you could override the
default segment for a lot of instructions. So:
mov ax,[bx] -- SRC address is DS:BX
mov es:[bx],ax -- DEST address is ES:BX
Technically, you could address as much as 256K without changing the
segment registers.
I got used to this, but I still preferred programming on the 6809 (8-bit
CPU) and 68000. *Much* nicer architectures.
-spc (And the 80386 introduced paging to this mess ... )
[1] Starting with the 80286, in proected mode, they are treated
differently and no longer point to a physical address. But that's
beyond the scope of *this* message.