# Divide by 3

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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
sta lo_product
pla
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
.proc div3_a
sta temp
lsr
lsr
ror
lsr