> On Aug 23, 2021, at 8:38 PM, Tom Stepleton via cctalk <cctalk@classiccmp.org>
> wrote:
>
> Hello,
>
> For the sake of illustration to folks who are not necessarily used to
> thinking about what computers do at the machine code level, I'm interested
> in collecting examples of single instructions for any CPU architecture that
> are unusually prolific in one way or another.
> ...
> Although I don't know it well, I suspect VAX will place well in one way or
> another.
Thinking some more about addressing modes, there are a couple of examples that
are, if not extra complex, at least extra unusual.
The strangest addressing mode I ever saw is found on the Electrologica X1. It
has the familiar indexed addressing mode called "B" mode, which uses the
contents of B1 plus the address field of the instruction as the effective
address. So far so good.
But then there is C mode, which is like B mode except that the computed
effective address is written back into the address field of the instruction.
It's used very rarely; one example is in the equivalent of "bzero" in the ALGOL
compiler run-time code. With this mode, the address field is set to buffer
address - n and the B register to n, for a stride of n. You can find a short
example here: http://helloworldcollection.de/#Assembler%C2%A0(X1)
Its successor, the X8, drops this addressing mode, but it has some interesting
quirks as well. There is a stack addressing mode, related to the indexed mode.
In stack mode, if the displacement is negative the stack pointer is
decremented by one, if positive it is incremented. So push and pop are not two
modes, but happen depending on the specified offset. "MC[0]=A" pushes A onto
the stack; "A=MC[-1]" pops that value.
paul