Machine code relative offsets

View: New views
5 Messages — Rating Filter:   Alert me  

Machine code relative offsets

by a92651delgado :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I am trying to understand how assembly is translated into machine code. I understand how to get the machine coding formats but I'm not sure how to calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20 03, I know that the relative offset is 03 (to get past the two bytes required by the 'inc' instruction)to get to the 'iny' instruction.

But I'm not sure why the rr = F3 for the 'dbne' instruction, how does that relative offset get me to the Again label?


Dissassembled code for program:
[CODE]          org   $600  
                ldy   #Array             ;CD B6 15
                ldaa  #N                 ;86 07
                clr    7,y               ;69 47
Again           brclr  0,y %11110000, Not_gtr  ;0F 40 F0 02
                bra    Update            ;20 03
Not_gtr         inc    Count             ;72 B6 1C
Update          iny                      ;02
                dbne   a,Again           ;04 30 F3
                swi                     ;            

Array           fdb   8,7,2                          
N               equ   7
Count           rmb   1[/CODE]


Re: Machine code relative offsets

by Edward Karpicz :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

rr=F3 in dbne has most significant bit set, which means rr displacement is
negative, F3 = -0D. 13 bytes from Again label to location after dbne (swi
instruction).

The rest can be found in CPU12/(S)/(SX) reference manuals.

Edward


----- Original Message -----
From: "AlD" <al_delgado@...>
To: <68HC12@...>
Sent: Wednesday, October 21, 2009 11:07
Subject: [68HC12] Machine code relative offsets


>I am trying to understand how assembly is translated into machine code. I
>understand how to get the machine coding formats but I'm not sure how to
>calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20 03,
>I know that the relative offset is 03 (to get past the two bytes required
>by the 'inc' instruction)to get to the 'iny' instruction.
>
> But I'm not sure why the rr = F3 for the 'dbne' instruction, how does that
> relative offset get me to the Again label?
>
>
> Dissassembled code for program:
> [CODE]          org   $600
>                ldy   #Array             ;CD B6 15
>                ldaa  #N                 ;86 07
>                clr    7,y               ;69 47
> Again           brclr  0,y %11110000, Not_gtr  ;0F 40 F0 02
>                bra    Update            ;20 03
> Not_gtr         inc    Count             ;72 B6 1C
> Update          iny                      ;02
>                dbne   a,Again           ;04 30 F3
>                swi                     ;
>
> Array           fdb   8,7,2
> N               equ   7
> Count           rmb   1[/CODE]
>
>
>
> ------------------------------------
>
> Yahoo! Groups Links
>
>
>
>


RE: Machine code relative offsets

by Redd, Emmett R-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

The inc instruction is 3 bytes.  Yes, rr = F3 for the dbne instruction is correct.

A formula which might help:  PCnew = PCbranch + len(branch) + rr

Or learn to count forwards and backwards in hexadecimal with zero being the first byte of the instruction after the branch.

Emmett Redd Ph.D.   mailto:EmmettRedd@...
Professor                                 (417)836-5221
Department of Physics, Astronomy, and Materials Science
Missouri State University             Fax (417)836-6226
901 SOUTH NATIONAL                   Lab (417)836-3770
SPRINGFIELD, MO  65897   USA    Dept (417)836-5131

"In theory there is no difference between theory and practice. In practice there is." -- Yogi Berra or Jan van de Snepscheut

________________________________________
From: 68HC12@... [68HC12@...] On Behalf Of AlD [al_delgado@...]
Sent: Wednesday, October 21, 2009 3:07 AM
To: 68HC12@...
Subject: [68HC12] Machine code relative offsets

I am trying to understand how assembly is translated into machine code. I understand how to get the machine coding formats but I'm not sure how to calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20 03, I know that the relative offset is 03 (to get past the two bytes required by the 'inc' instruction)to get to the 'iny' instruction.

But I'm not sure why the rr = F3 for the 'dbne' instruction, how does that relative offset get me to the Again label?


Dissassembled code for program:
[CODE]          org   $600
                ldy   #Array             ;CD B6 15
                ldaa  #N                 ;86 07
                clr    7,y               ;69 47
Again           brclr  0,y %11110000, Not_gtr  ;0F 40 F0 02
                bra    Update            ;20 03
Not_gtr         inc    Count             ;72 B6 1C
Update          iny                      ;02
                dbne   a,Again           ;04 30 F3
                swi                     ;

Array           fdb   8,7,2
N               equ   7
Count           rmb   1[/CODE]



------------------------------------

Yahoo! Groups Links



    http://docs.yahoo.com/info/terms/

Re: Machine code relative offsets

by a92651delgado :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks, do I include the byte(s) for the instruction after the dbne, in this case for the swi instruction or stop with the 3 bytes of the dbne?

--- In 68HC12@..., "Edward Karpicz" <karpicz@...> wrote:

>
> rr=F3 in dbne has most significant bit set, which means rr displacement is
> negative, F3 = -0D. 13 bytes from Again label to location after dbne (swi
> instruction).
>
> The rest can be found in CPU12/(S)/(SX) reference manuals.
>
> Edward
>
>
> ----- Original Message -----
> From: "AlD" <al_delgado@...>
> To: <68HC12@...>
> Sent: Wednesday, October 21, 2009 11:07
> Subject: [68HC12] Machine code relative offsets
>
>
> >I am trying to understand how assembly is translated into machine code. I
> >understand how to get the machine coding formats but I'm not sure how to
> >calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20 03,
> >I know that the relative offset is 03 (to get past the two bytes required
> >by the 'inc' instruction)to get to the 'iny' instruction.
> >
> > But I'm not sure why the rr = F3 for the 'dbne' instruction, how does that
> > relative offset get me to the Again label?
> >
> >
> > Dissassembled code for program:
> > [CODE]          org   $600
> >                ldy   #Array             ;CD B6 15
> >                ldaa  #N                 ;86 07
> >                clr    7,y               ;69 47
> > Again           brclr  0,y %11110000, Not_gtr  ;0F 40 F0 02
> >                bra    Update            ;20 03
> > Not_gtr         inc    Count             ;72 B6 1C
> > Update          iny                      ;02
> >                dbne   a,Again           ;04 30 F3
> >                swi                     ;
> >
> > Array           fdb   8,7,2
> > N               equ   7
> > Count           rmb   1[/CODE]
> >
> >
> >
> > ------------------------------------
> >
> > Yahoo! Groups Links
> >
> >
> >
> >
>



Re: Re: Machine code relative offsets

by Edward Karpicz :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

No, rr is relative to the address of instruction (or address of the first
byte of instruction) that follows immediately after dbne. If we add label
Next like this:

>> > Again           brclr  0,y %11110000, Not_gtr  ;0F 40 F0 02
>> >                bra    Update            ;20 03
>> > Not_gtr         inc    Count             ;72 B6 1C
>> > Update          iny                      ;02
>> >                dbne   a,Again           ;04 30 F3   <--- rr = $F3
>> > = -$0D
      Next
>> >                swi                     ;

, then rr will equal Next - Again. There are thirteen bytes between Again
and Next. rr is negative because target label is above the 'next' (Again is
at more lower address than Next).

Edward




----- Original Message -----
From: "AlD" <al_delgado@...>
To: <68HC12@...>
Sent: Wednesday, October 21, 2009 20:39
Subject: [68HC12] Re: Machine code relative offsets


> Thanks, do I include the byte(s) for the instruction after the dbne, in
> this case for the swi instruction or stop with the 3 bytes of the dbne?
>
> --- In 68HC12@..., "Edward Karpicz" <karpicz@...> wrote:
>>
>> rr=F3 in dbne has most significant bit set, which means rr displacement
>> is
>> negative, F3 = -0D. 13 bytes from Again label to location after dbne (swi
>> instruction).
>>
>> The rest can be found in CPU12/(S)/(SX) reference manuals.
>>
>> Edward
>>
>>
>> ----- Original Message -----
>> From: "AlD" <al_delgado@...>
>> To: <68HC12@...>
>> Sent: Wednesday, October 21, 2009 11:07
>> Subject: [68HC12] Machine code relative offsets
>>
>>
>> >I am trying to understand how assembly is translated into machine code.
>> >I
>> >understand how to get the machine coding formats but I'm not sure how to
>> >calculate 'rr' in all cases. For the example below 'bra' is 20 rr or 20
>> >03,
>> >I know that the relative offset is 03 (to get past the two bytes
>> >required
>> >by the 'inc' instruction)to get to the 'iny' instruction.
>> >
>> > But I'm not sure why the rr = F3 for the 'dbne' instruction, how does
>> > that
>> > relative offset get me to the Again label?
>> >
>> >
>> > Dissassembled code for program:
>> > [CODE]          org   $600
>> >                ldy   #Array             ;CD B6 15
>> >                ldaa  #N                 ;86 07
>> >                clr    7,y               ;69 47
>> > Again           brclr  0,y %11110000, Not_gtr  ;0F 40 F0 02
>> >                bra    Update            ;20 03
>> > Not_gtr         inc    Count             ;72 B6 1C
>> > Update          iny                      ;02
>> >                dbne   a,Again           ;04 30 F3
>> >                swi                     ;
>> >
>> > Array           fdb   8,7,2
>> > N               equ   7
>> > Count           rmb   1[/CODE]
>> >
>> >
>> >
>> > ------------------------------------
>> >
>> > Yahoo! Groups Links
>> >
>> >
>> >
>> >
>>
>
>
>
>
> ------------------------------------
>
> Yahoo! Groups Links
>
>
>
>