On Aug 24, 2021, at 11:57 AM, Peter Corlett via cctalk
<cctalk at classiccmp.org> wrote:
On Tue, Aug 24, 2021 at 08:47:33AM -0500, John Foust via cctalk wrote:
At 04:13 AM 8/24/2021, Peter Corlett via cctalk
wrote:
move.b ([0x12345678, %pc, %d0.w*8], 0x9abcdef0),
([0x87654321, %sp], %a0*4, 0x0fedcba9)
And which language and compiler case was
this aimed at?
I have no idea and dread to think, although I chose a worst-case example
which doesn't actually make much sense.
Might be block structured languages.
The Electrologica X8 has a complex addressing mode that was, I think, designed by
E.W.Dijkstra, and intended specifically to support the addressing of variables local to
outer blocks. There is a term for this, "display" I think. The basic idea is
to have a vector of pointers indexed by the static block number (nesting level), pointing
to the newest frame among all the invocations of that block. Then a variable reference
translates into a reference to that display (using the static block number) along with the
frame offset of the particular variable.
In the X8, that's handled in a specific addressing mode. For example
"M3[12]" means the effective address is the value found in entry 3 of the
display table (pointed at by memory location 63), plus 12.
paul