.ORG 0000h LD SP, 0080h ; ADDED FOR TESTING PURPOSES. CALL SORT HALT SORT: LD (DATA), HL ; SAVE DATA ADDRESS. LOOP: RES FLAG, H ; INITIALIZE EXCHANGE FLAG. LD B, C ; INITIALIZE LENGTH COUNTER. DEC B ; ADJUST FOR TESTING. LD IX, (DATA) ; INITIALIZE ARRAY POINTER. NEXT: LD A, (IX +0) ; FIRST ELEMENT IN COMPARISON. LD D, A ; TEMPORARY STORAE FOR ELEMENT. LD E, (IX +1) ; SECOND ELEMENT IN COMPARISON. SUB E ; COMPARISON FIRST TO SECOND. JR $ NOEX-$ ; IF FIRST > SECOND, NO JUMP. LD (IX +0), E ; EXCHANGE ARRAY ELEMENTS. LD (IX +1), D SET FLAG, H ; RECORD EXCHANGE OCCURRED. NOEX: INC IX ; POINT TO NEXT DATA ELEMENT. DJNZ NEXT -$ ; COUNT NUMBER OF COMPARISONS, REPEAT IF MORE DATA PAIRS. BIT FLAG, H ; DETERMINE IF EXCHANGE OCCURRED. JR NZ, LOOP -$ ; CONTINUE IF DATA UNSORTED. RET ; OTHERWISE, EXIT. FLAG: .EQU 0 ; DESIGNATION OF FLAG BIT. DATA: .DS 2 ; STORAGE FOR DATA ADDRESS. .END ; The current value of the location counter (PC) can be used in expressions by placing a '$' in the desired place. ; The Location Counter Symbol is allowable anywhere a numeric constant is.