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.