On Jun 21, 2021, at 11:26 AM, Chuck Guzis via cctalk
<cctalk at classiccmp.org> wrote:
On 6/21/21 1:39 AM, ben via cctalk wrote:
I have 'borrowed' copy of the Green
dragon book.
The book promotes code generation for a multi register machine. PDP 11,
PDP 10, IBM 360. "(C) Bell Labs 1979 " I think is big hint here.
The machine model I am looking at is a single accumulator design like
the 6800 or the IBM 1130. A AC,PC,Index and stack. No push or pop,
subroutine call returns the old pc in the AC.
What is a register, but a memory location with a special name? I'm
assuming that your model does have memory. Again, look to the older
systems, such as the much-maligned (by Dijkstra) 1620. You have *no*
user-addressable registers--it's all memory-to-memory. In lieu of a
stack, you need temporaries in which to stash intermediate results.
(The IBM 360 has no stack.)
The reason Dijkstra maligned the 1620 is not because of its lack of registers but because
of its lack of interrupts and inability to save the full execution state.
It's not so much that registers have special names but that they have a distinct place
in the instruction set. It may be explicit, as in current machines, or implicit in some
older machines that only have one "accumulator", like the ARRA or the CDC 6000
series PPUs or the PDP-8.
The registers may actually be implemented as memory (PDP-6 and PDP-10 without the
"fast registers" feature), and perhaps the Philips PR8000 which had 8 sets of 8
registers, one per interrupt level. Independently, registers may appear in the memory
address space, as in the PDP-10 or the Electrologica X8.
One of the restrictions of non-recursive functions in
FORTRAN was
because the idea of a machine-implemented stack was relatively
uncommon--the Burroughs B5000 (1961) was an outlier in general systems
architecture at the time.
The X8 also has a stack, not surprising given that Dijkstra was heavily involved in its
design. That machines came out in 1964 I think.
...
For
heaven's sake, all you need is a decent assembler--even a
cross-assembler. Writing compilers in a HLL is a recent (post 1970)
thing.
More or less, except for the Burroughs mainframes where everything was done in ALGOL or a
dialect -- such as ESPOL which was the variant used for writing the kernel. It apparently
didn't have an assembler; the little bit of machine code it needed to get the OS
started was as I understand it written in hex (or octal?) machine code.
Some early assemblers are only barely an assembler; consider the Electrologica X1; its
assembler takes only a few hundred words, in ROM. But it has only a rudimentary symbol
table and equally rudimentary opcodes; they don't quite rate the usual tag
"mnemonic"...
paul