Muchas gracias a todos. :)
Era justo lo que buscaba. Solo esperemos que la multiplicacion me quede en 8 bit y no se desvorde jeje.
Saludos :mrgreen:
Asi es lo mas probable es que el resultado de la multiplicacion supere un registro 8bits, por lo que te recomendaria que guardes la parte baja de tu multiplicacion en un registro de 8 y la parte alta en otro registro de 8.
Se podría hacer la multiplicacion en punto flotante en assembler?
Necesito multiplicar a un valor de 0 a 256 que está en un registro por un nro= 0.00435 que es una contante de una ecuacion de diferencias de un PID.
No sé si es punto flotante o no. creo que es "punto flotante" por que el numero esta en decimales.
Ayuda :-/
Si en verdad es todo un tema lo de la multiplicacion en punto flotante. :?
He decidido hacerlo en C pues no es dificil y ya tengo el codigo, pero solo quiero hacer la multiplicacion en C.
¿Hay alguna forma de pasar el codigo en C de la multiplicacion a Assembler?
Así tengo todo en assembler o la mayor parte.
Así no cominezo desde el principio todo mi programa en C.
Les pregunto por que capaz que ya habian tratado el tema.
Saludos :)
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
bcf status , c ;borramos c
Mult_
addwf byte_L , f ;El valor mult1 nunca se pierde aca
btfsc status , c ;ahi llevada?
call Mult_2 ;si
decfsz mult2 , f ;no y termino?
goto Mult_ ;no
return ;si, regresa
Mult_2
incf byte_H , f
return
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
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
Si en verdad es todo un tema lo de la multiplicacion en punto flotante. :?
He decidido hacerlo en C pues no es dificil y ya tengo el codigo, pero solo quiero hacer la multiplicacion en C.
...