[A83] Re: Conditional bcall()ing


[Prev][Next][Index][Thread]

[A83] Re: Conditional bcall()ing




Lets clear out some confusion ;-)

If you assemble this:

   jr label
   [..]
label:
   [..]

TASM will convert 'label' to an address which depends on the '.org' directive. Then TASM computes the number of bytes between the address of the byte after the 'jr' instruction and the calculated address of 'label'.

If one assembles the following:

   jr 3

TASM obviously doesn't have to calculate a label address. It just takes the address 0003h and calculates the number of bytes between the address of the byte after the 'jr' instruction and 0003h.

Then something like this:

   jr $+3

TASM interprets $ as a label. The following is exactly the same:

label:
   jr label+3

So TASM will calculate the number of bytes between the address of the byte after the 'jr' instruction and the address calculated from label+3.

Some examples:
-----
.org 0000h
   jr 3   ; byte after 'jr' is 0002h: 0003h-0002h=0001h -> hex 1801
.end
-----
.org 9327h
   jr 3   ; byte after 'jr' is 9329h: 0003h-9329h=6CDAh -> error
.end
-----
.org 9327h
   jr $+3   ; byte after 'jr' is 9329h: 9327h+0003h-9329h=0001h -> hex 1801
.end
-----

Hope this helps!

Tijl Coosemans


> ----------------------------------------
> From: Olle Hedman <alh@home.se>
> Sent: Mon Oct 29 17:17:48 GMT+01:00 2001
> To: <assembly-83@lists.ticalc.org>
> Subject: [A83] Re: Conditional bcall()ing
> 
> 
> 
> At 15:42 2001-10-29, you wrote:
> >Yes, that's right, just a small correction:
> >You can't write "jr nz,3" nor "jr 3" if you are going to compile with TASM
> >because TASM will then look for a label called "3".
> >That's why you must use operator $ ("jr nz,$+5" in our example) when
> >assembling with TASM.
> >If you are going to assemble by hand then you could write hex: 2003)
> 
> Not true, labels can't start with a number so TASM knows this is not a 
> label, but a number.
> But my statement wasn't true either I just found out.
> you _can_ write "jr 3"  but it will assemble to "1801" and not "1803", so 
> tasm assumes you count from the current instruction even with this format, 
> so you have to write "jr 5" even with this.
> Messy :)
> 
> ///Olle
> 
> 
> 

-----------------------------------------------------
Mail.be, Free WebMail and Virtual Office
http://www.mail.be