From: Brantley Coile <brantley@coraid.com>
To: 9fans@cse.psu.edu
Subject: Re: [9fans] Non-stack-based calling conventions
Date: Fri, 15 Feb 2008 19:23:22 -0500 [thread overview]
Message-ID: <11c3f7123799c7bb2fb4637fc62a10f8@coraid.com> (raw)
In-Reply-To: <9f3897940802151547u69c34d7dr1e1b26d36501f71e@mail.gmail.com>
Early Control Data machines, like many machines
of the era, used the return address to fine the parameters.
This meant that you put he parameters in the instruction
stream right after the call to the subroutine.
Here's the calling convention for your entertainment.
1) The calling program would put the parameters into memory
locations just past the call to the subroutine.
2) Do a return-jump to the subroutine. This puts the return
address in the first word of the subroutine and
begins to execute the second word.
3) Parameters are accessed by using and incrementing the
return address.
4) With the return address now safely stored in the first
word of the subroutine, we can now return to the
calling routine just by doing a indirect jump thru
the first word of the routine.
All this might not make sense to you so here is some code.
This is CDC 1830 assembler, the best I can remember it.
CDC 6600 works the same, but the code would be more
confusing to the unfamiliar.
.
.
* call sub(p1, p2)
ena parm1 put the parameter into the A register
sta p1 save it in the instruction stream right after the rtj
ena parm2 we have two parameters.
sta p2
rtj sub save RA at sub, begin executing at sub+1
p1 bss 1
p2 bss 1
jmp error
* first address to return to
.
.
.
sub bss 1 place to keep the return address
ldq sub
lda (q)
inq 1 point to next parameter
lda (q)
inq 2 point to last parameter and no error
stq sub put parameter back
jmp (sub) jmp indirect thru sub--return
By convention there we would follow the parameters with a jump
to an error handler and have the subroutine increment the RA
another time in case the subroutine had no error.
The IBM 7094 did a similar trick only it put the return address,
or I should say the 2's complement of it, in an index register
before it jumped to the subroutine. Parameters were picked up
using the index register. (7094 indexes seem strange to us now, but
they were *subtracted* from the base address in the instruction.)
The subroutine used a form of the transfer instruction that added
the number of words to the return address, er, I mean subtracted,
to return to the caller.
All the memory you would need was known as compile time.
Writing assembler meant watching for trying to execute
parameters as instructions. This does wonders for the design
of the instruction cache. :)
next prev parent reply other threads:[~2008-02-16 0:23 UTC|newest]
Thread overview: 115+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-13 22:03 [9fans] quote of the day erik quanstrom
2008-02-13 23:08 ` Pietro Gagliardi
2008-02-13 23:24 ` [9fans] Google search " dave.l
2008-02-13 23:31 ` Pietro Gagliardi
2008-02-13 23:41 ` erik quanstrom
2008-02-13 23:49 ` Pietro Gagliardi
2008-02-13 23:59 ` john
2008-02-14 0:04 ` Pietro Gagliardi
2008-02-14 6:11 ` Anant Narayanan
2008-02-15 17:39 ` Skip Tavakkolian
2008-02-14 16:45 ` Douglas A. Gwyn
2008-02-14 17:09 ` john
2008-02-14 17:27 ` erik quanstrom
2008-02-15 9:50 ` Douglas A. Gwyn
2008-02-15 11:49 ` Alf
2008-02-15 13:15 ` erik quanstrom
2008-02-15 14:56 ` Brantley Coile
2008-02-15 15:44 ` Eris Discordia
2008-02-15 16:07 ` erik quanstrom
2008-02-15 16:43 ` maht
2008-02-15 17:35 ` ron minnich
2008-02-15 18:14 ` Iruata Souza
2008-02-15 18:37 ` maht
2008-02-15 17:39 ` Eris Discordia
2008-02-15 19:05 ` maht
2008-02-15 20:11 ` Eris Discordia
2008-02-15 20:18 ` Pietro Gagliardi
2008-02-15 20:49 ` maht
2008-02-16 23:32 ` Eris Discordia
2008-02-15 23:37 ` [9fans] Non-stack-based calling conventions Lyndon Nerenberg
2008-02-15 23:39 ` Pietro Gagliardi
2008-02-15 23:47 ` Paweł Lasek
2008-02-16 0:23 ` Brantley Coile [this message]
2008-02-16 23:32 ` Eris Discordia
2008-02-16 23:41 ` Pietro Gagliardi
2008-02-16 23:49 ` Brantley Coile
2008-02-17 0:04 ` Brantley Coile
2008-02-17 13:30 ` Eris Discordia
2008-02-17 15:04 ` erik quanstrom
2008-02-17 21:43 ` Uriel
2008-02-17 23:58 ` erik quanstrom
2008-02-18 1:54 ` Bruce Ellis
2008-02-18 3:43 ` erik quanstrom
2008-02-18 4:31 ` Bruce Ellis
2008-02-18 4:40 ` Pietro Gagliardi
2008-02-18 6:22 ` Robert William Fuller
2008-02-18 7:23 ` Bruce Ellis
2008-02-18 8:38 ` Anant Narayanan
2008-02-22 10:02 ` Douglas A. Gwyn
2008-02-22 19:35 ` Anant Narayanan
2008-02-18 8:30 ` Anant Narayanan
2008-02-18 8:44 ` Bruce Ellis
2008-02-18 18:50 ` Federico G. Benavento
2008-02-18 21:53 ` Lorenzo Fernando Bivens de la Fuente
2008-02-18 22:55 ` y i y u s
2008-02-18 23:46 ` Uriel
2008-02-18 22:14 ` Pietro Gagliardi
2008-02-18 22:16 ` Pietro Gagliardi
2008-02-18 22:32 ` Federico G. Benavento
2008-02-20 11:39 ` maht
2008-02-20 17:19 ` Bruce Ellis
2008-02-22 10:02 ` Douglas A. Gwyn
2008-02-22 10:02 ` Douglas A. Gwyn
2008-02-18 22:13 ` LiteStar numnums
2008-02-18 4:44 ` Pietro Gagliardi
2008-02-18 4:46 ` Pietro Gagliardi
2008-02-18 5:03 ` Uriel
2008-02-17 16:08 ` Anthony Sorace
2008-02-17 22:03 ` Charles Forsyth
2008-02-22 10:01 ` Douglas A. Gwyn
2008-02-22 14:07 ` Iruata Souza
2008-02-22 10:01 ` Douglas A. Gwyn
2008-02-22 10:01 ` Douglas A. Gwyn
2008-02-16 8:29 ` Lluís Batlle
2008-02-17 23:09 ` Chad Dougherty
2008-02-18 21:50 ` Pietro Gagliardi
2008-02-22 10:02 ` Douglas A. Gwyn
2008-02-26 21:30 ` Paweł Lasek
2008-02-26 22:00 ` maht
2008-02-26 22:32 ` Brantley Coile
2008-02-26 23:15 ` Uriel
2008-02-26 22:33 ` Brantley Coile
2008-02-26 22:46 ` Bruce Ellis
2008-02-27 4:26 ` lucio
2008-02-27 6:52 ` ron minnich
2008-02-27 17:57 ` lucio
2008-02-28 9:33 ` Bill Gunshannon
2008-02-28 9:58 ` Charles Forsyth
2008-02-28 14:15 ` Bill Gunshannon
2008-02-14 17:14 ` [9fans] Google search of the day Eris Discordia
2008-02-14 17:28 ` Fco. J. Ballesteros
2008-02-14 20:14 ` Eris Discordia
2008-02-14 20:30 ` Patrick Kristiansen
2008-02-14 20:38 ` Eris Discordia
2008-02-14 22:09 ` Pietro Gagliardi
2008-02-15 9:00 ` Eris Discordia
2008-02-14 17:51 ` Iruata Souza
2008-02-15 9:31 ` sqweek
2008-02-18 9:48 ` Douglas A. Gwyn
2008-02-18 9:57 ` Gorka Guardiola
2008-02-19 9:17 ` sqweek
2008-02-19 0:28 [9fans] Non-stack-based calling conventions Andrew Simmons
2008-02-19 0:39 ` Brantley Coile
2008-02-19 0:43 ` Andrew Simmons
2008-02-19 0:52 ` Uriel
2008-02-19 1:06 ` Pietro Gagliardi
2008-02-19 1:33 ` Brantley Coile
2008-02-19 3:18 ` Michaelian Ennis
2008-02-19 3:29 ` Michaelian Ennis
2008-02-19 3:35 ` Pietro Gagliardi
2008-02-19 5:18 ` Skip Tavakkolian
2008-02-19 5:33 ` Skip Tavakkolian
2008-02-19 4:11 ` Bruce Ellis
2008-02-20 14:59 ` maht
2008-02-20 15:28 ` Uriel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11c3f7123799c7bb2fb4637fc62a10f8@coraid.com \
--to=brantley@coraid.com \
--cc=9fans@cse.psu.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).