;
; SCOMP --
; Vector Compare Routine. Compare vector pointed to by HL with that
; pointed to by DE. Vector is B bytes long for COMPB and BC bytes long for
; COMPBC. On exit, Zero Flag Set indicates match, Carry Flag Set indicates
; that vector pointed to by HL is binarily less than vector pointed to by DE.
; PSW is affected. HL, DE, BC are not affected.
;
COMPB::
PUSH B ; SAVE BC
MOV C,B ; SET COUNT IN C
MVI B,0
CALL COMPBC ; USE BC FOR COUNT
POP B ; RESTORE BC
RET
COMPBC::
PUSH H ; SAVE REGISTERS
PUSH D
PUSH B
; COMPARE LOOP
COMP:
LDAX D ; GET BYTE PTED TO BY DE
CMP M ; COMPARE TO BYTE PTED TO BY HL
JNZ COMPDN ; DONE IF NO MATCH
INX H ; PT TO NEXT
INX D
DCX B ; COUNT DOWN
MOV A,B ; DONE?
ORA C
JNZ COMP
; DONE WITH COMPARE; Z=>MATCH, C=>(HL)>(DE)
COMPDN:
JZ CMPDN ; DON'T COMPLEMENT CARRY IF ZERO SET
CMC ; C=>(HL)<(DE)
CMPDN:
POP B ; RESTORE REGISTERS
POP D
POP H
RET