Multiplicacion Y Division Pic
;****** Debemos declarar las variables primero, estas son:
;***************************************************
;****** Factor_A
;****** Factor_B
;****** Result_H
;******Result_L
;****** Dividendo_H
;****** Dividendo_L
;****** Divisor
;****** Cociente_H
;****** Cociente_L
;***************************************************
;Se carganPreviamente en Factor_A y Factor_B los valores a multiplicar
;El resultado quedará almacenado en Result_H y Result_L
Multiplicar
clrf Result_L ;borramos para inicializar
clrfResult_H
movf Factor_B,F ;Si es cero...
btfsc STATUS,Z ;En Caso que el Factor "B" Sea Cero
return ;volver con resultado= 0
movf Factor_A,W ;cargamos el Factor "A"Mult_Bucle
addwf Result_L,F ;Sumamos "A", Tantas veces como sea "B"
btfsc STATUS,C ;Existe Acarreo?...
incf Result_H,F ;...Si. Incrementamos el byte Mayor
decfsz Factor_B,F;Terminó la Multiplicación?...
goto Mult_Bucle ;... No, Seguimos haciendo sumas.
return ;Si. Volvemos a la rutina principal
;Se carga previamente en Dividendo_H yDividendo_L el valor total del Dividendo
;y en Divisor el valor del divisor. El resultado quedará en Cociente_H y Cociente_L
;y el resto quedará en Dividendo_L
;(Nota: Dividendo_H yDividendo_L serán borrados en el proceso de división)
Dividir
clrf Cociente_L ;Limpiamos el valor del resultado
clrf Cociente_H
VerifDiv
movfw Dividendo_H ;Sila parte alta del Dividendo...
btfss STATUS,Z ;contiene algún valor...
goto PuedeDividir ;... Podemos dividir
movfw Divisor ;Si no es el caso...
subwf Dividendo_L,W;...Verificamos que la parte baja del Dividendo...
btfss STATUS,C ;...sea mayor que el divisor
return ;En caso de ser menor, la división no se realiza
PuedeDividir
incf...
Regístrate para leer el documento completo.