Subject: Re: [stella] signed 8-bit comparisons? From: Bill Heineman <burger@xxxxxxxxxxxxxxxxx> Date: Thu, 04 Mar 2004 21:54:28 -0800 |
on 3/4/04 1:28 PM, KirkIsrael@xxxxxxxxxxxxx at KirkIsrael@xxxxxxxxxxxxx wrote: >> Hi there, >> >>> I think what you want is: >>> LDA var >>> CMP #MAX >>> BMI ltMAX >>> LDA #MAX >>> ltMAX >>> CMP #MIN >>> BPL gtMIN >>> LDA #MIN >>> gtMIN >>> STA var Or you can cheat... Since you're comparing a signed number to a constant... Do this... LDA Value EOR #$80 CMP #CONSTANT+$80 BCC LESS BCS GREATEREQUAL By adding 0x80 to the number, you convert 0-0x7F to 0x80-0xFF and 0x80-0xFF become 0x00-0x7F. Now, this turns your signed range into an UNSIGNED range. By the performing the UNSIGNED CMP instruction, you can use BCC and BCS with 100% accuracy. You see, there is a problem with overflow for signed numbers in 6502. To get around it, there is the overflow flag. The proper way to do signed compares was... LDA Value CMP #$80 BVC NoOverflow BMI GreaterEqual BPL Less NoOverflow BPL GreaterEqual BMI Less That code was a joke. Now, if you can guarantee that there is no overflow (Both values are like sign and the subtraction won't cross the $80 boundary, then you can ditch the BVC (Normal case) and just use BPL for Greaterequ and BMI for less (Most people do this anyways. I use the EOR #$80 trick for many years and it's the fastest way to compare a value to a constant with no fancy stuff. Burger ---------------------------------------------------------------------------------------------- Archives (includes files) at http://www.biglist.com/lists/stella/archives/ Unsub & more at http://www.biglist.com/lists/stella/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: Re: [stella] signed 8-bit compa, Dennis Debro | Thread | Re[3]: [stella] signed 8-bit compar, zu03776 |
RE: Re: [stella] signed 8-bit compa, Dennis Debro | Date | Re[3]: [stella] signed 8-bit compar, zu03776 |
Month |