From: ron minnich
I know branch and link was in the 360; was it earlier?
Well, as I understand it, branch and link (BAL and BALR) did a couple of
different things (if I have this wrong, I hope someone will correct me). It
was a subroutine call, but it also loaded a base register.
(Those were used to deal with the /360's bizarro memory management, which was
not 'base and bounds, with a user's virtual address space starting at
like a lot of contemporary machines. Rather, a process saw its actual physical
memory location, so depending on where in memoty a process was loaded, it
would be executing at different addresses visible to it; the base registers
were used to deal with that. This made swapping complicated, since it had to
be swapped back in to the same location.)
Which function of BALR are you enquiring about? The subroutine call part?
From: Angelo Papenhoff
The Whirlwind used the A register for this purpose.
Might be earlier than this, I just happen to know the Whirlwind
somewhat well. It's late 40s machine, so you probably won't find
anything *much* older.
The only machines older than Whirlwind I know of are the ACE (design;
not implemented until later) and EDVAC.
I have ACE stuff, but i) the documentation is really wierd, and hard to read,
and ii) it's really bizarre (it didn't have opcodes; different registers did
different things). There were subroutines written for it, but it's not clear
how they were called.
The EDVAC, the only thing I have on it is von Neumann's draft, and it's
even harder to read than Turing's ACE Report!