From: "Paul Gilmartin" <[email protected]>
Sent: Thursday, 9 September 2010 3:51 PM


 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.

Agreed.

 Once it's corrected, Robin has no valid argument.

Even when corrected, your example is irrelevant.
My statement is about what the hardware does
when LA computes the address from Base and Displacement.

Reply via email to