div.inc
author Tero Marttila <terom@paivola.fi>
Sun, 20 Apr 2014 23:51:57 +0300
changeset 80 5254ba612630
parent 12 af46bd59b2b8
permissions -rw-r--r--
dmx-web: slightly better RGB colorpicker control..
12
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
;*************************************************************************** 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
;* 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
;* "div8u" - 8/8 Bit Unsigned Division 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
;* 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
;* This subroutine divides the two register variables "dd8u" (dividend) and  
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
;* "dv8u" (divisor). The result is placed in "dres8u" and the remainder in 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
;* "drem8u". 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
;*   
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
;* Number of words	:14 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
;* Number of cycles	:97 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
;* Low registers used	:1 (drem8u) 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
;* High registers used  :3 (dres8u/dd8u,dv8u,dcnt8u) 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
;* 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
;*************************************************************************** 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
;***** Subroutine Register Variables 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
.def	drem8u	=r15		;remainder 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
.def	dres8u	=r16		;result 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
.def	dd8u	=r16		;dividend 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
.def	dv8u	=r17		;divisor 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
.def	dcnt8u	=r18		;loop counter 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
;***** Code 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
div8u:	sub	drem8u,drem8u	;clear remainder and carry 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
		ldi	dcnt8u,9		;init loop counter 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
d8u_1:	rol	dd8u			;shift left dividend 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
		dec	dcnt8u			;decrement counter 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
		brne	d8u_2		;if done 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
		ret					;    return 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
d8u_2:	rol	drem8u			;shift dividend into remainder 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
		sub	drem8u,dv8u		;remainder = remainder - divisor 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
		brcc	d8u_3		;if result negative 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
		add	drem8u,dv8u		;    restore remainder 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
		clc					;    clear carry to be shifted into result 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
		rjmp	d8u_1		;else 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
d8u_3:	sec					;    set carry to be shifted into result 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
		rjmp	d8u_1 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
 
af46bd59b2b8 division routines
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41