|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2176 (0x880) Types: TextFile Names: »STRLOP.SRC«
└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80) └─ ⟦this⟧ »STRLOP.SRC«
;STRING RELATIVE OPERATIONS ; NAME STRLOP ENTRY STREQL,STRNQL,STRGRT,STRGEQ,STRLSS,STRLEQ ; LTIND EQU 1 ;< INDIC. GEIND EQU 2 ;>= INDIC. EQIND EQU 3 ;= INDIC. LEIND EQU 4 ;<= INDIC. GTIND EQU 5 ;> INDIC. STREQL CALL STRCMP ;EQUAL CPI EQIND JRNZ NTTRU JR TRU STRNQL CALL STRCMP ;NOT EQUAL CPI EQIND JRZ NTTRU JR TRU STRGRT CALL STRCMP ;GREATER THAN CPI GTIND JRNZ NTTRU JR TRU STRLSS CALL STRCMP ;LESS THAN CPI LTIND JRNZ NTTRU JR TRU STRGEQ CALL STRCMP ;GREATER THAN OR EQUAL CPI GEIND JRC NTTRU JR TRU STRLEQ CALL STRCMP ;LESS THAN OR EQUAL CPI LEIND JRNC NTTRU JR TRU TRU: XRA A STC RET NTTRU XRA A RET STRCMP: LXI H,3 DAD S ;SKIP 2 RETURN ADDRESSES MVI D,0 MOV E,C ;SIZE OF SECOND STRING DAD D ;TOP OF SECOND STRING PUSH H MOV E,B ;SIZE OF FIRST STRING DAD D ;TOP OF FIRST STRING POP D PUSH H ;HL <- TOP OF FIRST STRING PUSH D ;DE <- TOP OF SECOND STRING MOV A,M ;ACTUAL LENGTH OF FIRST STRING CPI 0 ;ZERO LENGTH? JRZ ST1ZER ;YES, CHECK SECOND STRING LDAX D ;ACTUAL LENGTH OF SECOND STRING CPI 0 ;ZERO LENGTH? JRZ HGRT ;FIRST NOT ZERO, SECOND IS- FIRST GREATER CMP M ;NEITHER IS ZERO LENGTH JRC DCNTR MOV B,M ;B <- SHORTER ACT. LENGTH FOR COUNTING JR CMPR DCNTR: MOV B,A CMPR: DCX H ;CHAR OF FIRST STRING DCX D ;CHAR OF SECOND STRING DCR B ;CHAR. COUNTER LDAX D CMP M ;COMPARE THEM JRC HGRT ;FIRST IS GREATER JRNZ DGRT ;SECOND IS GREATER XRA A ;CHARS. EQUAL - LAST CHAR? CMP B JRNZ CMPR ;NO, TRY NEXT CHARS POP D ;LAST CHARS EQUAL POP H LDAX D ;WHICH IS LONGER STRING? CMP M JRC HLONG JRNZ DLONG STREQU: MVI A,EQIND ;EQUAL STRINGS JR CLNUP HGRT POP D POP H HLONG MVI A,GTIND ;FIRST IS LONGER JR CLNUP DGRT POP D POP H DLONG MVI A,LTIND ;SECOND IS LONGER CLNUP POP D ;CLEAN UP STACK POP B INX H SPHL PUSH B XCHG PCHL ;AND RETURN ST1ZER: LDAX D ;LENGTH OF SECOND STRING CPI 0 JRNZ DGRT ;SECOND STRING NOT ZERO, 2ND IS GREATER THAN 1ST POP D ;BOTH HAVE ZERO LENGTH, EQUAL POP H JR STREQU «eof»