The eZ8 does not have a division instruction. To overcome this you need to use a division subroutine.
Here is an example of a 8/8 bits division routine.
;Routine: div8 ; R4 = R0/R1 ; remainder: R2 SCOPE div8: ld R2,#0 ld R3,#8 $loop: rlc R0 rlc R2 ; Shift R0 into R2 cp R1,R2 ; If R2 is less than... jr nz,$F ; or equal to R1 (if Z : set C) scf $$: rlc R4 cp R1,R2 jr ugt,$F sub R2,R1 ; Subtract R1 from R2 $$: djnz R3,$loop ret
This is an example of a 16/16 bits division routine. On division by 0 the quotient is 0 and the remainder will be equal to the dividend. Keep this in mind when using this routine.
;Routine: div16 ;RR6 = RR0 / RR2 ;remainder: RR4 ;uses R0-7 and R15 SCOPE div16: ld R4,#0 ld R5,#0 ld R15,#16 $loop: rlc R1 rlc R0 rlc R5 rlc R4 cp R3,R5 cpc R2,R4 jr nz,$F scf $$: rlc R7 rlc R6 cp R3,R5 cpc R2,R4 jr ugt,$F sub R5,R3 sbc R4,R2 $$: djnz R15,$loop ret
Please submit corrections, suggestions, and new documentation here: Submit a ticket
← Return to Main Site
This is not an official Zilog website. Zilog nor 8times8 are liable for any damage done to equipment. Tutorial and reference copyright ©8times8 Creative Commons CC-0 License (public domain.) This reference uses content from Zilog's technical datasheets. Fair use only. Datasheets copyright © 2013 Zilog®, Inc. Z8, Z8 Encore!, Z8 Encore! XP and Z8 Encore! MC are trademarks or registered trademarks of Zilog, Inc. Read Zilog's terms at zilog.com
Website design by Koen van Vliet. Hosted by sourceforge.net