; ; COMPAR.MAC ; ; A SUBROUTINE TO COMPARE TWO ARRAYS AND DETERMINE WHICH IS BIGGER ; VALUE RETURNED IS 1 IF 1ST IS BIGGER, 2 IF 2ND, AND 0 IF SAME ; Considers capital letters and small letters as indistinguishable. ; If both characters being compared are null, it assumes it reached end. ; I=COMPAR(1ST, 2ND, MAX NO OF CHAR) ; COMPAR MUST BE DEFINED AS AN INTEGER ; .TITLE COMPAR .GLOBL COMPAR COMPAR: MOV 2(R5),R0 ; GET THE 1ST ARRAY MOV 4(R5),R1 ; GET THE 2ND ARRAY MOV @6(R5),R2 ; MAXIMUM NO. OF CHARACTERS LOOP: TSTB (R0) BEQ NONE ; THIS WAS A NULL CHARACTER LOO2: MOVB (R0)+,R3 ; GET CHARACTER FROM 1ST ARRAY MOVB (R1)+,R4 ; GET CHARACTER FROM 2ND ARRAY BIC #177400,R3 BIC #177400,R4 CMPB R3,#140 ; IS THIS A CAPITAL LETTER? BLE CAP1 ; IT IS A CAPITAL LETTER. SUB #40,R3 ; CHANGE TO CAPITAL LETTER CAP1: CMPB R4,#140 ; Is the character from 2nd array capital? BLE CAP2 ; IT IS CAPITAL SUB #40,R4 ; CHANGE TO CAPITAL CAP2: CMPB R4,R3 ; IS THE 2ND BIGGER? BGT SEC ; 2ND IS BIGGER BLT FIRST ; 1ST IS BIGGER DEC R2 TST R2 ; IS THIS LAST CHARACTER? BNE LOOP ; NO IT WASN'T CLR R0 ; IF GET HERE 2 ARRAYS WERE = BR DONE NONE: TSTB (R1) ; IS OTHER CHARACTER NULL BGT LOO2 ; NO IT WASN'T CLR R0 ; YES IT WAS BR DONE SEC: MOV #2,R0 ; 2ND ARRAY WAS BIGGER BR DONE FIRST: MOV #1,R0 ; 1ST ARRAY WAS BIGGER DONE: RETURN .END