Skip to content

Instantly share code, notes, and snippets.

@pmsanford
Created March 3, 2013 08:50
Show Gist options
  • Save pmsanford/5075376 to your computer and use it in GitHub Desktop.
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.
. 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