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?