Nevertheless a word of explanation is indicated.

It seems the opportunity for confusion arises from the double use of the
equal sign.

Without looking it up and entirely from memory, I could explain it as
follows:

The first equal sign is because BINTVL is a keyword operand of the STIMER
macro - as opposed to REAL which is a positional operand.

The second equal sign is a bit subtle. This is a use of an assembler
facility, a literal, whereby a constant which requires to be defined in a
storage area can be specified in the instruction where it is used. The
constant in the form of a literal, which would otherwise appear as something
like

FIVESEC DC A(5*100)

can be specified in a macro operand if, when used within the macro and
extracted from that operand to create an instruction, it "looks" just the
same as if the literal had been used on the instruction. I expect within the
macro there is probably a load instruction and the second field of the
instruction is the value of the BINTVL operand, for example

L 1,=A(5*100)

Where are those literals to be found? Well a tidy programmer - or one who
needs to pay attention to addressing requirements in a largish program -
will introduce a LTORG assembler statement somewhere in the sequence of
instructions where constants will not "get in the way", perhaps following an
unconditional branch and typically near the end of a smallish source program
module. If the programmer "forgets" I vaguely remember that the assembler
has to tidy up for him/her by dealing with accumulated literals when the END
statement is encountered.

The constant could also have been defined as

FIVESEC DC F'500'

for example, but I think I adopted the A-form rather than the F-form of
defining a full-word numerical constant because brackets printed more
quickly than quotes on a 1403-N1 printer - what trivia one recalls!

Personally, during my long career - my assembler class was in 1967 - with
occasional bursts of assembler writing, quite early on I made myself a
personal standard never to use literals since they led to untidiness. Also,
talking about "smallish" and "largish" above in connection with assembler
programs and standards I set myself, I decided that the sign of an assembler
module which had become too large was one which could not be written with a
single base register. In a sense these two "standards" cancelled each other
out since, with the second standard, I could have happily used literals and
let them be "rolled out" after the END statement without having to worry
about exceeding the capacity of a single base register - most of the time!

Come to think of it, there's another subtlety in the use of the asterisk for
multiplication. Is it that the value corresponding to the BINTVL operand is
in hundredths of a second so that specifying 5*100 emphasises this point,
that is, it makes it clear that we want a 5 second delay? This is a
calculation which the assembler does so that the value actually stored is
500.

Chris Mason

Normally, the "Original Message" from Gerhard Postpischil would appear here.
Unfortunately, the list server has taken exception to "excessive amount of
quoted material from previous  posts" for whatever reason so I have been
obliged to omit it all - on the fifth attempt!

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to