Skip to main content
NESdev Wiki
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Divide by 3

A lot of times, you need to divide something by 3. One way is to multiply by $55.

16-bit dividend, no remainder

 ; divide 16 bit number by 3 by multiplying by 1/3
 ; enter with
 ; A containing the hi byte of the number to be divided by 3
 ; Y containing the lo byte of the number to be divided by 3
 ; the hi byte of the partial product is kept in A or saved
 ; on the stack when neccessary
 ; the product (N/3 quotient) is returned hi byte in A,
 ; lo byte in Y

.proc div3_ay

 ; save the number in lo_temp, hi_temp

 sty lo_temp
 sty lo_product
 sta hi_temp

 ldy #$09
 clc
 bcc ENTER

 ; each pass through loop adds the number in
 ; lo_temp, hi_temp to the partial product and
 ; then divides the partial product by 4

LOOP:
 pha
 lda lo_product
 adc lo_temp
 sta lo_product
 pla
 adc hi_temp
ENTER:
 ror
 ror lo_product
 lsr
 ror lo_product
 dey
 bne LOOP
 ldy lo_product
 rts
.endproc

8-bit dividend, no remainder

 ; enter with number to be divided in A
 ; answer returned in A
.proc div3_a
 sta temp
 lsr
 lsr
 adc temp
 ror
 lsr
 adc temp
 ror
 lsr
 adc temp
 ror
 lsr
 adc temp
 ror
 lsr
 rts
.endproc

References

See also

Edit this page on GitHub