No voy a opinar del codigo porque no lo use ni tampoco lo vi, pero voy a opinar sobre lo que pusiste
Repasando esta subrutina, veo que tiene algunos fallos, aparte de que no funciona por tener rutinas mal escritas como:
movfw en vez de movwf
MOVFW xxx es una
pseudo-instruccion soportada por MPASM lo que hace es un
MOVF xxx, W
http://ww1.microchip.com/downloads/en/DeviceDoc/33014L.pdfPag. 320
El significado es muy distinto al de MOVWF, el cual es el inverso Uno de registro a W, y otro de W a Registro.
Personalmente, no me gustan las pseudo-instrucciones, pero cada uno programa como desea.
Luego tiene cosas como esta rutina que son a la contra:
movwf Divisor ;Cargo el valor del Divisor en W..
Cuando en realidad lo que esta haciendo es cargar en Divisor lo que se encuentra en work.
Empieza la subrutina con
movwf Dividendo_H ;Si la parte alta del Dividendo...
btfss STATUS,Z
Chequeando el STATUS sin previamente no haber echo nada.
Mirando el codigo veo que lo cambiaste a MOVFW por MOVWF en ambas situaciones
Como ya te dije el MOVFW es un MOVF, si miras la tabla de instrucciones el MOVF actualiza la bandera Z cuando es ejecutada, es una forma simple de saber si el registro es 0 o no.
Tu error de creer que esta mal el MOVFW y corregirlo por otra cosa distinta hace que no funcione seguramente.
Cambia los MOVFW xxx por MOVF xxx, w y te va a funcionar.
EDITO:Acabo de ver el codigo asi nomas por arriba, y con solo ver que se usa un ADDWF y un SUBWF, puedo decir con certeza que:
- La multiplicacion se realiza con sumas sucesivas, sumas segun la cantidad de veces que necesitas
- La division se realiza con restas sucesivas, restas hasta que no puedas restar mas.
La multiplicacion tiene una ventaja frente a factores pequeños, pero si un factor es grande se hace consumidor de tiempo, hay otras formas de multiplicar mediante rotaciones que hacen que sea fijo el tiempo de procesado de la multiplicacion
https://en.wikipedia.org/wiki/Binary_multiplierY sobre la division realmente es mas complicado. La otra es tener una tabla de 255 valores de ( 1/x ) y luego multiplicas. Otras formas:
https://en.wikipedia.org/wiki/Division_algorithm