; SUBROUTINE TO DO MULTIPLE-PRECISION ADDS. ; ENTRY: (IX) = POINTS TO MOST SIGNIFICANT BYTE OF DESTINATION. ; (IY) = POINTS TO MOST SIGNIFICANT BYTE OF SOURCE. ; (B) = NUMBER OF BYTES IN OPERANDS. ; CALL MULADD. ; (RETURN). ; EXIT: (IX) = UNCHANGED. ; (IY) = UNCHANGED. ; (A) = DESTROYED. ; (B) = 0. ; .org 0000h LD SP, 0080h ; ADDED FOR TESTING PURPOSES. LD IX, 0050h LD IY, 0060h LD DE, 9999h LD B, 04h LD A, 00h CALL MULADD HALT MULADD: PUSH DE ; SAVE DE. LD E, B ; NUMBER OF BYTES TO E. LD D, 0 ; DE NOW HAS NUMBER. DEC DE ; DE NOW HAS NUMBER -1. ADD IX, DE ; POINT TO LEAST SIGNIFICANT BYTE. ADD IY, DE ; POINT TO LEAST SIGNIFICANT BYTE. POP DE ; RESTORE ORIGINAL. XOR A ; RESET CARRY FLAG. LOOP: LD A, (IX +0) ; GET DESTINATION. ADC A, (IY +0) ; ADD SOURCE. LD (IX +0), A ; STORE RESULT. DJNZ LOOP1 ; GO IF NOT DONE. RET ; RETURN. LOOP1: DEC IX ; POINT TO NEXT HIGHER. DEC IY ; POINT TO NEXT HIGHER. JP LOOP ; CONTINUE. .ORG 0050h FIFTY: .DB 11h,22h,33h,44h .ORG 0060h SIXTY: .DB 55h,0EEh,77h,0FFH .END