Created
March 3, 2013 08:50
-
-
Save pmsanford/5075376 to your computer and use it in GitHub Desktop.
A program that tests if two strings in memory are equal and prints whether or not to the terminal.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
. PRNTST | |
. Output a null-terminated string to the console. | |
. Args: | |
. 1. Address of output string, WORD | |
. 2. Max Length, WORD | |
. 3. Device ID, BYTE | |
PRNTST START | |
STS BASADD | |
LDA @BASADD | |
STA STROUT | |
LDX #3 | |
LDA @BASADD,X | |
STA MAXLEN | |
LDX #6 | |
LDCH @BASADD,X | |
STCH DEVNO | |
CLEAR X | |
CLEAR A | |
CLOOP LDCH @STROUT,X | |
COMP #0 | |
JEQ DONE | |
WD DEVNO | |
TIX MAXLEN | |
JEQ DONE | |
J CLOOP | |
DONE RSUB | |
BASADD RESW 1 | |
MAXLEN RESW 1 | |
STROUT RESW 1 | |
DEVNO RESB 1 | |
. GETLEN | |
. Find the length of a null-terminated string. | |
. 1. Address of string to find the length of, WORD | |
. 2. Address to store the length in, WORD | |
GETLEN CSECT | |
STS BASADD | |
CLEAR X | |
LDA @BASADD | |
STA STRADR | |
LDX #3 | |
LDA @BASADD,X | |
STA RETADR | |
CLEAR A | |
CLEAR X | |
CLEAR S | |
LDT #1 | |
CLOOP LDCH @STRADR,X | |
COMP #0 | |
JEQ DONE | |
TIX #0 | |
J CLOOP | |
DONE STX @RETADR | |
LDS BASADD | |
RSUB | |
BASADD RESW 1 | |
STRADR RESW 1 | |
RETADR RESW 1 | |
. STRCMP | |
. Compare two strings | |
. 1. Address of first string, WORD | |
. 2. Address of second string, WORD | |
. 3. Max length to compare, WORD | |
. 4. Address to place return value, WORD | |
STRCMP CSECT | |
STS BASADD | |
LDA @BASADD | |
STA SONE | |
LDX #3 | |
LDA @BASADD,X | |
STA STWO | |
LDX #6 | |
LDA @BASADD,X | |
STA MAXLEN | |
LDX #9 | |
LDA @BASADD,X | |
STA RETADR | |
CLEAR S | |
CLEAR T | |
CLEAR A | |
CLEAR X | |
LOOP LDCH @SONE,X | |
RMO A,T | |
LDCH @STWO,X | |
COMPR A,T | |
JGT GT | |
JLT LT | |
TIX MAXLEN | |
JEQ EQ | |
J LOOP | |
EQ CLEAR A | |
J RETR | |
GT LDA #1 | |
J RETR | |
LT LDA #-1 | |
RETR STA @RETADR | |
LDS BASADD | |
RSUB | |
BASADD RESW 1 | |
SONE RESW 1 | |
STWO RESW 1 | |
MAXLEN RESW 1 | |
RETADR RESW 1 | |
TSTSTF CSECT | |
EXTREF GETLEN,STRCMP,PRNTST | |
LDS #BASADR | |
LDA #WONE | |
STA BASADR | |
LDX #3 | |
LDA #BASADR | |
ADD #6 | |
STA BASADR,X | |
+JSUB GETLEN | |
LDA #WTWO | |
LDX #3 | |
STA BASADR,X | |
LDX #9 | |
LDA #BASADR | |
ADD #9 | |
STA BASADR,X | |
+JSUB STRCMP | |
LDX #9 | |
LDA BASADR,X | |
COMP #0 | |
JEQ EQL | |
LDA #NQSTR | |
STA PADR | |
J PRO | |
EQL LDA #EQSTR | |
STA PADR | |
PRO LDA PADR | |
STA BASADR | |
LDX #3 | |
LDA #BASADR | |
ADD #3 | |
STA BASADR,X | |
LDX #6 | |
CLEAR A | |
LDCH =X'06' | |
STCH BASADR,X | |
+JSUB GETLEN | |
+JSUB PRNTST | |
BYTE X'FF' | |
PADR RESW 1 | |
WONE BYTE C'TEST' | |
BYTE X'00' | |
WTWO BYTE C'TEST' | |
BYTE X'00' | |
EQSTR BYTE C'Equal' | |
BYTE X'00' | |
NQSTR BYTE C'Not Equal' | |
BYTE X'00' | |
BASADR RESW 5 | |
END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment