LIST P=12Ce518 ;*******************************************************************; ; Division : Dividendo(24 bits)/Divisor(24 bits)->Dividendo(24 bits) ; con Resto en RestoHH & RestoHL & RestoLL (24 bits) ; (a) Cargar Divisor en DivisorHH & DivisorHL & DivisorLL (24 bits) ; (b) Cargar DividendoHH & DividendoHL & DividendoLL (24 bits) ; (c) CALL Dividir ; (d) El resultado estará en DividendoHH & DividendoHL & DividendoLL ; (e) El Resto en RestoHH & RestoHL & RestoLL (24 bits) ; ;*******************************************************************; DivisorHH equ 0x07 DivisorHL equ 0x08 DivisorLL equ 0x09 DividendoHH equ 0x0A DividendoHL equ 0x0B DividendoLL equ 0x0C RestoHH equ 0x0D RestoHL equ 0x0E RestoLL equ 0x0F ACCdHH equ 0x10 ACCdHL equ 0x11 ACCdLL equ 0x12 Temp equ 0x13 __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC INCLUDE ORG 0 ;******************************************************************* ; Cargar Dividendo y Divisor movlw H'FF' ;Dividendo movwf DividendoHH movlw H'42' movwf DividendoHL movlw H'41' movwf DividendoLL movlw H'AA' ;Divisor movwf DivisorHH movlw H'13' movwf DivisorHL movlw H'E8' movwf DivisorLL call Dividir goto Final ;******************************************************************** Dividir movlw .24 ;para 24 desplazamientos movwf Temp movf DividendoHH,W ;lleva Dividendo al temporal ACCd movwf ACCdHH movf DividendoHL,W movwf ACCdHL movf DividendoLL,W movwf ACCdLL clrf DividendoHH clrf DividendoHL clrf DividendoLL clrf RestoHH clrf RestoHL clrf RestoLL Dloop bcf STATUS,C rlf ACCdLL, F rlf ACCdHL, F rlf ACCdHH, F rlf RestoLL, F rlf RestoHL, F rlf RestoHH, F movf DivisorHH,W subwf RestoHH,W ;comprueba si Divisor>Resto btfss STATUS,Z goto Nochk movf DivisorHL,W subwf RestoHL,W ;comprueba si Divisor>Resto btfss STATUS,Z goto Nochk movf DivisorLL,W subwf RestoLL,W ;si msb es igual comprobar lsb Nochk btfss STATUS,C ;carry a uno si Resto>Divisor goto Nogo movf DivisorLL,W ;Resto-Divisor a Resto subwf RestoLL, F btfss STATUS,C decf RestoHL, F movf DivisorHL,W subwf RestoHL, F btfss STATUS,C ;shift a 1 en Resultado(Dividendo) decf RestoHH, F movf DivisorHH,W subwf RestoHH, F bsf STATUS,C ;shift a 1 en Resultado(Dividendo) Nogo rlf DividendoLL, F rlf DividendoHL, F rlf DividendoHH, F decfsz Temp, F ;loop goto Dloop return ;******************************************************************* Final ; END ;****************************************************************