Está en la página 1de 2

;***************************************************************************

;*
;* "div8u" - 8/8 Bit Unsigned Division
;*
;* This subroutine divides the two register variables "DD8U" (dividend) and
;* "DV8U" (divisor). The result is placed in "DRES8U" and the remainder in
;* "DREM8U".
;*
;* Number of words: 14
;* Number of cycles: 97
;* Low registers used: 1 (DREM8U)
;* High registers used : 3 (DRES8U/DD8U,DV8U,DCNT8U)
;*
;***************************************************************************
;***** Subroutine Register Variables

.def drem8u =r15 ; Declaramos la variables del residuo llamada "remainder"


.def dres8u =r16 ; Declaramos la variable del cociente llamada "result"
.def dd8u =r17 ; Declaramos la variable del dividendo llamada "dividend"
.def dv8u =r18 ; Declaramos la variable del divisor llamada "divisor"
.def dcnt8u =r19 ; Declaramos un contador

;********** code ; Codigo del programa


org 0x00 ; Direccion donde empieza a guardarse el programa
ldi dd8u,76 ; Cargamos a la variable del dividendo con el numero 76
ldi dv8u,24 ; Cargamos a la variable del divisor con el numero 24
div8u: ; Etiqueta
sub drem8u,drem8u ; Resta sin carry, limpiamos r16
ldi dcnt8u,9 ; inicializamos el valor del contador en 9 (9
desplazamientos)
d8u_1: ; Etiqueta
rol dd8u ; Desplazamos el dividendo un bit hacia la izquierda
dec dcnt8u ; Decrementamos el contador
brne d8u_2 ; Salto condicional, el resultado de la operacion anterior
es cero y da un salto
rjmp fin ; Salto incondicional
d8u_2: ; Etiqueta
rol drem8u ; Desplazamos el residuo un bit hacia la izquierda
sub drem8u, dvou ; drem8u = drem8u - dv8u .Restamos el residuo del divisor
brcc d8u_3 ; Salto condicional, si el carry se encuentra con valor 0
add drem8u,dv8u ; drem8u = drem8u + dv8u, suma sin carry entre el residuo y el
divisor
clc ; Limpiamos el carry
rjmp d8u_1 ; Salto incondicional a la etiqueta d8u_1
d8u_3: ; Etiqueta
sec ; Seteamos el carry
rjmp d8u_1 ; Salto incondicional
fin:
rjmp fin ; Es un lazo incondicional y es necesario para que el
microcontrolar realize todo el tiempo sus funciones de leer, decodificar, ejecutar
y almacena