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

Reply via email to