8000 ;RUTIN MULT 8001 ; 32*32 BITS MULTIPLIKATION. VARJE 8002 ; TAL 16 BIT HELTAL 16 BIT DECIMALTAL 8003 ; ENDAST POSSITIVA HEXADECIMALA TAL 8004 ; IN VARIABLER MPR 4 BYTE 8005 ; MPD 4 BYTE 8006 ; UT MPR*MPD= MM 4 BYTE 8007 ; 8008 MPR EQU 3018H ;4 8009 MPD EQU 301CH ;4 8010 MM EQU 3020H ;4 8011 SLASK EQU 3044H ;2 8012 ; 8013 ORG 2E4EH 8014 MULT PUSH AF 8015 PUSH BC 8016 PUSH DE 8017 PUSH HL 8018 EXX 8019 PUSH BC 8020 PUSH DE 8021 PUSH HL 8022 EXX 8023 LD A,(MPR+1) 8024 LD C,A 8025 LD A,(MPR) ;MPRlow 16 Bit i CA 8026 LD B,10H ;R[KNARE=16 8027 EXX 8028 LD BC,(MPD) ;MPDlow i BC' 8029 LD DE,0H 8030 LD HL,0H ; MMhigh 8031 EXX 8032 LD HL,0H ; MMlow Resultat=MM 8033 ; 8034 LD DE,(MPD+2H) ;MPDhigh i DE 8035 ; 8036 M1 SRL C ; SKIFTA FR]N V[NSTER 8037 RRA ; SKIFTA VIA CARRY 8038 JR NC,M2 8039 ADD HL,DE ; MPDhigh+MMlow 8040 EXX 8041 ADC HL,DE ; MPDx+MMhigh+CARRY 8042 EXX 8043 M2 EXX 8044 LD (SLASK),HL ; SPARAS TILLSV. 8045 LD H,B 8046 LD L,C 8047 ADD HL,HL ; V[NSTER SKIFT 8048 LD B,H 8049 LD C,L 8050 LD HL,(SLASK) 8051 EXX 8052 ; 8053 EX DE,HL 8054 ADC HL,HL ;MPDhigh V[NSTER+CARRY 8055 EX DE,HL 8056 EXX 8057 EX DE,HL 8058 ADC HL,HL ;MPDx V[NSTER+CARRY 8059 EX DE,HL 8060 EXX 8061 DJNZ M1 8062 ; 8063 LD A,(MPR+3) 8064 LD C,A 8065 LD A,(MPR+2) ;MPRhigh i CA 8066 LD B,10H 8067 ; 8068 M3 SRL C ; SKIFTA FR]N V[NSTER 8069 RRA ; SKIFTA VIA CARRY 8070 JR NC,M4 8071 ADD HL,DE ; MPDhigh+MMlow 8072 EXX 8073 ADC HL,DE ; MPDx+MMhigh+CARRY 8074 EXX 8075 M4 EXX 8076 LD (SLASK),HL ; SPARAS TILLSV. 8077 LD H,B 8078 LD L,C 8079 ADD HL,HL ; V[NSTER SKIFT 8080 LD B,H 8081 LD C,L 8082 LD HL,(SLASK) 8083 EXX 8084 ; 8085 EX DE,HL 8086 ADD HL,HL ;MPDhigh V[NSTER+CARRY 8087 EX DE,HL 8088 EXX 8089 EX DE,HL 8090 ADC HL,HL ;MPDx V[NSTER+CARRY 8091 EX DE,HL 8092 EXX 8093 DJNZ M3 8094 LD (MM),HL ;MMlow 8095 EXX 8096 LD (MM+2),HL ;MMhigh 8097 POP HL ; OBS EXX !! 8098 POP DE 8099 POP BC 8100 EXX 8101 POP HL 8102 POP DE 8103 POP BC 8104 POP AF 8105 RET