[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Twos complement subtraction
Michael J. Mahon <mjmahon@aol.com> wrote:
> "ict@ccess" <gids.rs@sasktel.net> wrote:
>> On Mar 22, 4:17 am, roughana <andrew.roug...@writeme.com> wrote:
>>> I have a situation where I am modifying existing code that uses twos
>>> complement subtraction in 65816 assembly.
>>>
>>> Here's the original code:
>>>
>>> TYA ; Length in Y
>>> EOR #-1
>>> SEC
>>> ADC :PTRlength ;ZP address
>>> STA :PTRlength ;ZPaddress
>>>
>>> Now it turns out that we need to subtract one more than the length in
>>> Y.
>>> Here's one solution:
>>>
>>> TYA
>>> INC
>>> EOR #-1
>>> SEC
>>> ADC :PTRlength ;ZP address
>>> STA :PTRlength ;ZPaddress
>>>
>>> and a second solution which is less cycles. But will this do the trick
>>> in all cases?
>>>
>>> TYA
>>> EOR #-1
>>> CLC
>>> ADC :PTRlength ;ZP address
>>> STA :PTRlength ;ZPaddress
>>>
>>> I stepped through it and the second one worked with the case I tried.
>>> Both resulted in carry set at the end.
>>>
>>
>>
>> Here's another if you want the carry to be clear
>>
>> TYA
>> SEC
>> SBC PTRlength
>> EOR #-1
>> STA PTRlength
>
> Or, if you know that Carry is set, use the above code without the SEC. If
> you know Carry is set, use the earlier code, but omit the CLC. ;-)
Oops--second case "if you know that Carry is clear...", natch.
-michael - NadaNet 3.1 and AppleCrate II: http://home.comcast.net/~mjmahon