; SUBROUTINE TO DO MULTIPLE-PRECISION SUBTRACTS ; ENTRY: (IX) POINTS TO MOST SIGNIFICANT BYTE OF DESTINATION ; (IY) POINTS TO MS BYTE OF SOURCE ; (B) IS NUMBER OF BYTES IN OPERANDS ; CALL MULADD ; (RETURN) ; EXIT: (IX) IS UNCHANGED ; (IY) IS UNCHANGED ; (A) IS DESTROYED ; (B) IS 0 ; .ORG 0000h ; CHANGE ON REASSEMBLY. LD IX, 0040h ; THESE LINES ADDED TO TEST THE PROGRAM. LD IY, 0050h ; " LD B, 4 ; " LD SP, 0070h ; " CALL MULADD ; " HALT ; " MULADD: PUSH DE ; SAVE DE. LD E, B ; # BYTES TO E. LD D, 0 ; DE NOW HAS #. DEC DE ; DE NOW HAS # -1. ADD IX, DE ; POINT TO LS (LEAST SIGNIFICANT) BYTE. ADD IY, DE ; POINT TO LS BYTE. POP DE ; RESTORE ORIGINAL. XOR A ; RESET CARRY FLAG. LOOP: LD A, (IX +0) ; GET DESTINATION. SBC A, (IY +0) ; ADD SOURCE. LD (IX +0), A ; STORE RESULT. DJNZ LOOP1 ; GO IT NOT DONE. RET ; RETURN. LOOP1: DEC IX ; POINT TO NEXT HIGHER. DEC IY ; POINT TO NEXT HIGHER. JP LOOP ; CONTINUE. ; THESE LINES ADDED TO TEST THE PROGRAM. .org 0040h ; IX DESTINATION AREA. 00 05 3F F2. DEFB 00h ; +844,050. DEFB 05h DEFB 3Fh DEFB 0F2h .org 0050h ; IY SOURCE AREA. 00 07 A1 20. DEFB 00h DEFB 07h DEFB 0A1h DEFB 20h ; 00053FF2 + 0007A120 = +000C E112h = 844,050(DECIMAL). .END