I'm using shift operations to divide a long word in register D3 by three and storing the result in memory address specified by A2:
MOVE.L D1, D2, D3, -(SP)
CLR.L D5
MOVE.B #1, D4
Loop LSR.L D2, D3
ROXR.L #1,D5
BCS DONE
SUBI.B #1, D2
BLT Loop
CLR.B D4
DONE MOVE.L (SP)+, D3, D2, D1
RTS
Is this correct?