On 9/8/2010 11:15 PM, Fred van der Windt wrote:
I'm surprised that this would assemble.

                R:F  00000          20          USING TEST5,R15
                                    21 *
0000 4810 F010            00010    22          LH    R1,=H'-4096'
                R:1 FFF000          23          USING -4096,R1
0004 4120 F004            00004    24          LA    R2,*
0008 4130 2FFC           FFFFFC    25          LA    R3,-4(,R2)
                                    26 *
0010                               27          LTORG
0010 F000                          28                =H'-4096'

I don't understand why the instruction at line 25 assembles
as 4130 2FFC.  As far as I can see, it should generate an error.

Me too.  As Tony corrected me, I should have coded:

         LA R3,-4(R2)

Can anyone explain how HLASM resolved this displacement?

Still, Robin is correct.  The base-displacement arithmetic is
addition only.  The displacement is an unsigned value from 0
to 4095.  So, if the program is loaded into location 1000 and
executed, statement 24 would set register 2 to x'1004' and
statement 25 would set register 3 to x'2000'.  That is, 1004+FFC.

All irrelevant because of my coding error in line 25.  Once it's corrected,
Robin has no valid argument.

You added the same USING I did to establish addressability of the literal pool. 
But that also seems to mess up the original problem because the weird R1 stuff 
isn't used anymnore. R2 is set to the address of the first LA instruction. R3 
is set to R2+FFC. Surely the R1 stuff is meant to do *something*?

Which it does, once line 25 is corrected.

-- gil

Reply via email to