Simple String Comparisons by Jonathyn Bet'nct
[Up to Source Code Repository]
Simple String Comparisons
These two routines will compare two strings, in Pascal string format (length byte followed by string). Upon entry, the addresses of the strings are stored in $FA/FB and $FC/FD. $FF is used as a temporary variable. Upon exit, the zero flag is set if the strings are equal, and cleared otherwise; thus BEQ and BNE can be used. High ASCII characters are considered the same as their low ASCII equivalents; to differentiate between high and low ASCII, simply remove the AND #$7F's.
Comparing Strings (Case-Sensitive):
STREQU: LDY #$00 ;Compare strings, case-sensitive LDA ($FA),Y ;Naturally, the zero flag is used to return if the strings are equal CMP ($FC),Y BEQ STREQU1 RTS STREQU1: TAY STREQULP: LDA ($FC),Y AND #$7F STA $FF LDA ($FA),Y AND #$7F CMP $FF BNE STREQUEX DEY BNE STREQULP STREQUEX: RTS
Comparing Strings (Case-Insensitive):
STREQI: LDY #$00 ;Compare strings, case-insensitive LDA ($FA),Y ;Naturally, the zero flag is used to return if the strings are equal CMP ($FC),Y BEQ STREQI1 RTS STREQI1: TAY STREQILP: LDA ($FC),Y AND #$7F CMP #$7B BCS STREQI2 CMP #$61 BCC STREQI2 SBC #$20 STREQI2: STA $FF LDA ($FA),Y AND #$7F CMP #$7B BCS STREQI3 CMP #$61 BCC STREQI3 SBC #$20 STREQI3: CMP $FF BNE STREQIEX DEY BNE STREQILP STREQIEX: RTSLast page update: July 12, 2004.