On Wed, 8 Sep 2010 08:35:42 -0600, Paul Gilmartin wrote:
>On Sep 8, 2010, at 05:39, robin wrote:
>>
>> Classic base-displacement atithmetic is always addition,
>> never subtraction.
>
>Ahem.
>
> LH R1,=H'-4096'
> USING -4096,R1
> LA R2,*
> LA R3,-4(,R2)
>
>What does R3 now address?
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.
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.
--
Tom Marchant