Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sdd.hp.com!zaphod.mps.ohio-state.edu!van-bc!ubc-cs!uw-beaver!zephyr.ens.tek.com!tektronix!reed!glacier!busker!f20.n226.z1.FIDONET.ORG!Lawrence.DOliveiro From: Lawrence.DOliveiro@f20.n226.z1.FIDONET.ORG (Lawrence DOliveiro) Newsgroups: comp.sys.mac.programmer Subject: MPW Assembler question Message-ID: <653.2783DF10@busker.fidonet.org> Date: 28 Dec 90 15:26:08 GMT Sender: ufgate@busker.fidonet.org (newsout1.26) Organization: FidoNet node 1:226/20 - cmhGate UF Gateway, Columbus OH Lines: 57 Reply-To: ldo@waikato.ac.nz I can use the "reg" directive to give a symbolic name to a set of registers, for example RegsUsed reg d3/a2-a4 Then I can put a movem.l RegsUsed, -(sp) at the beginning of a block of code, and movem.l (sp)+, RegsUsed at the end, and if I ever change the code to use a different set of registers, I only have to update one line to do the proper save/restore, instead of two. However, in this block of code, I also want to access arguments and return results on the stack, using instructions like move.l Result, 4+Something(sp) The problem is this "Something": its value depends on the exact number of registers in RegsUsed. I see no way of automatically computing it from RegsUsed, for example using a hypothetical macro function as follows: move.l Result, 4+4*&NumberOfRegsIn(RegsUsed)(sp) The only alternative seems to be to maintain the register list as a string, and use some of the macro functions to parse this list into its pieces myself, and not use the "reg" directive at all. Otherwise, I have to count up the offset myself, *and* remember to update it if the number of registers I'm using changes. More chances for things to go wrong. Another solution, of course, is to use a stack frame register and offset from that to the result area. But that means saving/restoring another register--and if I weren't worried about the overhead of this, I wouldn't be using assembly language in the first place. Any ideas, anybody? I agree it's only a minor inelegance, but... Lawrence D'Oliveiro fone: +64-71-562-889 Computer Services Dept fax: +64-71-384-066 University of Waikato electric mail: ldo@waikato.ac.nz Hamilton, New Zealand 37^ 47' 26" S, 175^ 19' 7" E, GMT+13:00 + Organization: University of Waikato, Hamilton, New Zealand -- Lawrence DOliveiro - via FidoNet node 1:105/14 UUCP: ...!{uunet!glacier, ..reed.bitnet}!busker!226!20!Lawrence.DOliveiro INTERNET: Lawrence.DOliveiro@f20.n226.z1.FIDONET.ORG