PDP-12 at the RICM

Sean Conner spc at conman.org
Tue Jul 14 18:02:20 CDT 2015

It was thus said that the Great Johnny Billquist once stated:
> Yeah. Segment is something I usually associate with the solution done in 
> the 8086 family, where you essentially have a segment register which 
> gives the base, and then you work from there. Essentially all memory is 
> one chunk.
> The 8086 have both an instruction and a data segment, which just means 
> that some instructions refer to data, and that uses the data segment 
> register, while instructions (obviously) are addressed through the 
> instruction segment register. I never worked with the 8086, but don't it 
> actually also have a third segment register? Not that I can remember 
> what it was used for... Oh, and all references are relative to the 
> segment register (should be obvious, but I figured I should point it out.)

  The 8086 had four segment registers:

	CS	- Code segment, used with IP register
	DS	- Data segment
	SS	- Stack segment, used with SP and BP registers
	ES	- Extra segment, used with DI for string instructions as
		  destination (DS:SI as source)

  You could override instructions dealing with memory with any of the
segment registers:

	mov	ax,[foo]	; load AX from memory location DS:foo
	mov	bx,es:[bar]	; load BX from memory location ES:bar
	mov	cx,cs:[baz]	; load CX from memory location CS:baz
	mov	dx,ss:[snafu]	; load DX from memory locaiton SS:snafu

  On the 8086 and 80186, the contents of the segment registers are shifted 4
bits to the left then added to the offset (total 20 bit offset).  Starting
with the 80286, in protected mode, the segment registers are actually
indexes into one of two tables (the GDT (global descriptor table) or LDT
(local descriptor table)) and are not actual addresses.

  -spc (God!  I still remember this stuff?)

More information about the cctalk mailing list