[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.

I know quite sure this is only the case with jp.

>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
>
>
>





Follow-Ups: