Programa que permite dividir dos números A y B de 16 bits

;Programa que permite dividir dos números A y B de 16 bits que de como resultado
;un cociente y un resto

list p=16f877
include "p16f877.inc"

cblock 0x20
divisor_l ; Definiciòn
divisor_h ; del bloque
dividendo_l ; de las
dividendo_h ; variables
cociente_l ; a
cociente_h ; utilizar
resto_l ;
resto_h ;
endc ;fin de definicón

org 0x00; Vector reset
goto inicio;

org 0x05 ;Salva el vector de interrupción
inicio clrf cociente_l ;Inicializa
clrf cociente_h ;las variables
clrf resto_l ;
clrf resto_h ;
ciclo clrf STATUS ;
movf divisor_l,w ;carga menos peso del divisor
subwf dividendo_l,f ;lo resta menos peso del dividendo
movf divisor_h,w ;carga el mayor peso del divisor
btfss STATUS,C ;Hubo acarreo?
addlw 1 ;si,
subwf dividendo_h,f ;lo resta con el mayor peso de dividendo
btfsc STATUS,C ;hubo acarreo?
goto mayor ;si, el dividendo es mayor que el divisor
movlw 0x00 ;carga cero para ver si son iguales
subwf dividendo_l,w ;
btfsc STATUS,Z ;
goto sigue ;
goto menor ;
sigue movlw 0x00 ;
subwf dividendo_h,w ;
btfsc STATUS,Z ;
goto igual ;
goto menor ;

menor movf dividendo_l,w ;
movwf resto_l ;
movf dividendo_h,w ;
movwf resto_h ;
goto fin ;

mayor incf cociente_l,f ;
btfss STATUS,C ;
goto acarreo ;
goto ciclo ;
acarreo movlw 1 ;
addwf cociente_h,f ;
goto ciclo ;

igual incf cociente_l,f ;
btfss STATUS,C ;
goto acarr1 ;
goto fin ;
acarr1 movlw 1 ;
addwf cociente_h,f ;
goto fin ;

fin NOP
NOP
end ;

No response to “Programa que permite dividir dos números A y B de 16 bits”