CBLOCK
byte_H, byte_L, Mult1, Mult2
ENDC
;los registros utilisados son byte_H y byte_L almasenan el resultado de la multiplicacion
;los registros Mult1, Mult2 los operandos
Mult
clrf byte_L ; borramos para inicilisar
clrf byte_H
movf mult1 , w ;cargamos el operando 1
Mult_
addwf byte_L , f ;El valor mult1 nunca se pierde aca
btfsc status , c ;ahi llevada?
incf byte_H , f
decfsz mult2 , f ;no y termino?
goto Mult_ ;no
return ;si, regresa
El programa es un poquito mas corto. Elimine dos lineas. Pero tu algoritmo tiene un error si Mult2 es cero. Multiplica 256 veces incorrectamente.
¿Solucion?:
CBLOCK
byte_H, byte_L, Mult1, Mult2
ENDC
;los registros utilizados son byte_H y byte_L almacenan el resultado de la multiplicacion
;los registros Mult1, Mult2 los operandos
Mult
clrf byte_L ; borramos para inicializar
clrf byte_H
movf mult2,f ; Si es cero...
btfsc STATUS,Z
return ; volver con resultado= 0
movf mult1 , w ;cargamos el operando 1
Mult_
addwf byte_L , f ;El valor mult1 nunca se pierde aca
btfsc status , c ;hay llevada?
incf byte_H , f
decfsz mult2 , f ;no y termino?
goto Mult_ ;no
return ;si, regresa
Saludos.