Hier noch eine sehr effiziente Divisionsroutine für zwei 16-Bit-Werte.
Sie braucht nur 7 Register und 18 Instruktionen.
Ausserdem berechnet sie auch den Rest der Division.

Code:
; Input
; r25:r24 = Zähler
; r23:r22 = Nenner

; Output 
; r25:r24 = Quotient
; r27:r26 = Rest

; Verwendete Register:
; r21-r27

div16:
; Ergebnis auf 0, Carry löschen
          clr     r26
          sub     r27, r27
; 17 Bits werden rotiert (16 Bits-Wert und Carry)
          ldi     r21, 17
          rjmp    div16_start

div16_loop:
; Zähler nach links rotieren (Bits kommen aus r25:r24)
          rol     r26
          rol     r27
; Vergleich gegen Nenner
          cp      r26, r22
          cpc     r27, r23
          brcs    div16_start
; Abziehen, wenn kleinergleich
          sub     r26, r22
          sbc     r27, r23

div16_start:
; Hier entsteht das Komplement des Ergebnisses
; C=0: es wurde abgezogen
; C=1: es wirde nicht abgezogen
          rol     r24
          rol     r25
          dec     r21
          brne    div16_loop
; fertig
; Bits des Ergebnis müssen noch invertiert werden
          com     r24
          com     r25
          ret
Die Routine ist von avr-gcc.