Este codigo lo he generado en 1 minuto con el niple. Te permite escoger algunas opciones, pero yo he puesto lo mas estandar, que todos los valores de entrada y salida de la rutina esten en registor de la RAM....bueno, espero t sirva esta rutina.
;------------------------------------------------------------
; Código assembler generado por Niple.
; Nombre del Proyecto: tdbprototipo
; Autor: Desarrollo Niple.
; Fecha: 14/04/2004
; PIC: 16F84
; Velocidad de reloj: 4 Mhz
; Descripcion: crear las rutinas basicas para un 16f84a para comprobar el hard. del prototipo del tdb
;------------------------------------------------------------
LIST P=PIC16F84
;------------------------------------------------------------
; Declaración de Registros
;------------------------------------------------------------
w equ 00h
status equ 0x03
porta equ 0x05
_np_temp1 equ 0x0c
regalto equ 0x0d multiplicando bajo
regbajo equ 0x0e multiplicando alto
rmultiplicadoralto equ 0x0f multiplicador alto
multiplicadorbajo equ 0x10 multiplicador bajo
res3 equ 0x11 resultado
res2 equ 0x12 resultado
res1 equ 0x13 resultado
res0 equ 0x14 resultado
_np_temp2 equ 0x15
_np_temp3 equ 0x16
_np_temp4 equ 0x17
_np_temp5 equ 0x18
_np_temp6 equ 0x19
_np_temp7 equ 0x1a
_np_temp8 equ 0x1b
_np_temp9 equ 0x1c
;------------------------------------------------------------
; Declaración de Bits
;------------------------------------------------------------
c equ 0 ;carry / borrow bit
rp0 equ 5 ;registrer banck select bit
;------------------------------------------------------------
; Inicio
;------------------------------------------------------------
reset org 0
goto paso2
;------------------------------------------------------------
; programa principal
;------------------------------------------------------------
paso2
;multiplicar a 16 bits (res0,res1,res2,res3 = regalto,regbajo * rmultiplicadoralto,multiplicadorbajo)
bcf status,rp0 ;cambiar a pagina 0
movf regbajo,w
movwf _np_temp2
movf regalto,w
movwf _np_temp1
movf multiplicadorbajo,w
movwf _np_temp2
movf rmultiplicadoralto,w
movwf _np_temp1
call multiplicacion_16
movf _np_temp3,w
movwf res0
movf _np_temp4,w
movwf res1
movf _np_temp5,w
movwf res2
movf _np_temp6,w
movwf res3
"aqui el resto del programaaaaa""
;------------------------------------------------------------
; Declaración de Subrutinas
;------------------------------------------------------------
multiplicacion_16
;calculo matematico multiplicacion a 16 bits
movlw 0x10
bcf status,rp0 ;cambiar a pagina 0
movwf _np_temp9
movf _np_temp4,w
movwf _np_temp8
movf _np_temp3,w
movwf _np_temp7
clrf _np_temp4
clrf _np_temp3
multiplicacion_16_1
rrf _np_temp8,f
rrf _np_temp7,f
btfss status,c
goto multiplicacion_16_2
movf _np_temp1,w
addwf _np_temp3,f
btfsc status,c
incf _np_temp4,f
movf _np_temp2,w
addwf _np_temp4,f
multiplicacion_16_2
rrf _np_temp4,f
rrf _np_temp3,f
rrf _np_temp6,f
rrf _np_temp5,f
decfsz _np_temp9,1
goto multiplicacion_16_1
return
End