Vous êtes sur la page 1sur 2

ANEXO 1

;*************************************************************************
**
;*
;* "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 ; remainder

.def dres8u = r16 ; result


.def dd8u = r16 ; dividend
.def dv8u = r17 ; divisor
.def dcnt8u = r18 ; loop counter
;***** code
org 0x00
ldi dd8u,76
ld dv8u,24
div8u: sub dremu,drem8u ; clear remainder and carry
ldi dcnt8u,9 ; init loop counter
d8u_1: role dd8u ; shift left dividend
dec dcnt8u ; decrement counter
brn d8u_2 ; if done
rjmp fin ; return
d8u_2: rol drem8u ; shift dividend into remainder
sub drem8u,dv8u ; remainder = remainder - divisor
brcc d8u_3 ; if result negative
add drem8u,dv8u ; restore remainder
sec ; clear carry to be shifted into result
rjmp d8u_1 ; else
d8u_3: sec ; set carry to be shifted into result
rjmp d8u_1
fin rjmp fin

DESCRIPCIÓN DEL PROGRAMA

El programa realiza la división binaria entre dos números de 8 bits sin signo, (variables de registro
"DD8U" (dividendo) y "DV8U" (divisor). El resultado se coloca en "DRES8U" y el resto
en"DREM8U".

INSTRUCCIONES UTILIZADAS

1) .def .- Esta instrucción permite definir nombres a los registros que se van utilizar a lo
largo del programa.
2) .org .- Establece el contador de programa en un valor determinado (por lo general 0x00
3) Ldi .- Carga una constante de 8 bits en un registro definido.
4) Ld .- Carga una constante con un decremento previo de -1.
5) Dec .- Decrementa en 1 el valor de un registro y lo guarda en el mismo registro
6) Brn .-
7) Rjmp .- Realiza una etiqueta en el programa , donde se podrá realizar algún salto.
8) Add .- Realiza la suma de 2 registros sin contar su acarreo
9) Brcc .- Realiza un salto en el contador de programa a la etiqueta o línea del mismo , si el
carry de la diferencia entre 2 registros comparados sea 1 .
10) sub .- Realiza la subtracción entre 2 registros y lo guarda en el minuendo.
11) Rol .- Desplaza un bit a la izquierda un registro y la vadera C (carry) pasa a tomar el lugar
del bit cero cero.
12) Sec .- Establece el indicador de acarreo (C) en SREG (Registro de Estado), pone en 1 el
carry.

D8U_1,2,3 .- Subrutinas o funciones del programa.

Vous aimerez peut-être aussi