; subrutina MULT24 (sin signo) ; 24-Bit x 24-Bit a 48-Bit ; ; entradas: r2, r1, r0 = multiplicando X (MSB = R2) ; r5, r4, r3 = multiplicador Y (MSB = R5) ; ; salida: r0, r1, r2, r3, r4, r5 = resultado P = X x Y (MSB = R0) ; MULT24: push B push dpl push dph mov r7,#$00 mov a, r0 mov b, r3 mul ab ; multiplica XL x YL push acc ; Pimer byte mov dpl, b mov a, r0 mov b, r4 mul ab ; multiplica XL x YM add a,dpl mov dpl,a clr a addc a,b mov dph,a mov a, r1 mov b, r3 mul ab ; multiplica XM x YL add a, dpl push acc ; Segundo byte clr a addc a,b add a,dph jnc nc inc r7 nc: mov dph, a mov a, r0 mov b, r5 mul ab ; multiplica XL x YH add a,dph mov dph,a clr a addc a,b add a,r7 mov dpl,a mov a, r1 mov b, r4 mul ab ; multiplica XM x YM add a,dph mov dph,a clr a addc a,b add a,dpl jnc nc1 mov r7,#$00 inc r7 nc1: mov dpl,a mov a, r2 mov b, r3 mul ab ; multiplica XH x YL add a,dph push acc ; Tercer byte clr a addc a,b add a,dpl jnc nc2 inc r7 nc2: mov dpl,a mov a, r1 mov b, r5 mul ab ; multiplica XM x YH add a,dpl mov dpl,a clr a addc a,b add a,r7 jnc nc3 mov r7,#$00 inc r7 nc3: mov dph,a mov a, r2 mov b, r4 mul ab ; multiplica XH x YM add a,dpl push acc ; Cuarto byte clr a addc a,b add a,dph mov dph,a mov a, r2 mov b, r5 mul ab ; multiplica XH x YH add a,dph push acc ; Quinto byte clr a addc a,b add a,r7 mov r0,a ; Sexto byte pop $01 pop $02 pop $03 pop $04 pop $05 pop dph pop dpl pop B ret