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