Chris,

I have a software package consisting of roughly 250,000 lines of assembler
code.  It would be 2-3 times that size if I had not gone to considerable
effort to use relative addressing and immediate operands.

You apparently feel that baseless code is unnecessary.  My real world
experience tells me a wholly different story.

John P. Baker

-----Original Message-----
From: IBM Mainframe Assembler List [mailto:assembler-l...@listserv.uga.edu]
On Behalf Of Chris Craddock
Sent: Monday, December 20, 2010 12:38 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: Baseless vs Based

wow what a busy topic! At the risk of throwing gasoline on a burning
building, I have to say it sounds like a lot of people are struggling to
write "baseless code" (or whatever is eventually decreed as the politically
correct term) just for the sake of being "baseless". It is obviously very
trendy right now, but IMO that is a "baseless" exercise. I have never needed
extra registers in assembly language code anyway. And if I had, what would I
be saving by rearranging everything just to avoid having a base register for
code? I would still need to establish a base register for program constants
and it matters not a whit to me whether I waste that register on the
(usually small) number of constants, or let it span the entire enclosing
CSECT. In fact, in defense of the latter, that's the easiest and simplest
thing to do and in doing so, I don't have to come up with any goof-ball
schemes for establishing transient addressability either to code or data.
Everything works just like it always has for nearly fifty years and there is
much to be said for not astonishing the great body of (gasp - legacy!) macro
code we all depend on.
If I was writing enormous great gobs of code that needed more than one base
register, the first thing I would do is slap myself silly. Then I would
rearrange that code into manageable chunks so that problem went away. My
personal rule has always been 4KB or less per function. Sure I could do more
(and in exceptionally rare cases, I will) but why would I want to? It is a
lot easier to maintain intellectual control over small well structured hunks
of code than those gigantic single CSECT monsters with half a dozen on the
fly subroutine linkage conventions smeared haphazardly across five thousand
lines of code. Yeah you know the ones I'm talking about. Literally nobody
has ever complained about having to maintain my code - just ask the folks
that still do.
Now if I was a compiler writer, I might get a lot more excited about long
displacement and relative instructions. To begin with there are no "legacy"
assembly macros to deal with in generated code and pretty much all compiler
writers tend to burn a base register for addressing constants anyway. After
the first blush of curiosity wears off, nobody ever looks at the generated
code anyway and they certainly don't have to maintain it, so all in all it
is a pretty decent deal for compiler writers and (btw) that's who it was
done for.
My bottom line is: don't get carried away with this stuff. If you're an
assembly language programmer you don't need it and it is only going to end
up biting you in the ass if you pursue unnatural acts just to avoid having a
base register for code.
CC

Reply via email to