Das hab ich gerade produziert: es lehnt an die schriftliche Division aus der Grundschule (verschlafen?) an, wie man sieht funzt dieses Verfahren auch in Binär. Es ist zwar Delphi-Code weil ich zum Testen nicht extra den µC proggen wollte, aber wens interessiert, der kanns ja in assembler übersetzen.
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  r16, r18, r20:word;//r16=Dividend, r18=Divisor, r20=Ergebnis
  i:byte;            //Schleifenzähler
begin
  r16:=StrToIntDef(Edit1.Text,1);//Dividend laden, bei Mist im Eingabefeld 1
  r18:=StrToIntDef(Edit2.Text,1);//Divisor laden
  while (r18<high(r16) shr 1) do //Divisor bis zum Anschlag...
    r18:=r18 shl 1;              //nach links schieben.
  for i:=0 to 15 do begin        //Schleife, für jedes Ergebnis-Bit
    r20:=r20 shl 1;              //Ergebnis weiterschieben
    if (r16>=r18) then begin     //wenns reinpasst...
      r16:=r16-r18;              //einmal subtrahieren ...
      r20:=r20 or 1;             //und ne Eins ins Ergebnis.
    end;                         //Ende If.
    r18:=r18 shr 1;              //Divisor weiterschieben
  end;                           //Ende Schleife.
  r18:=StrToIntDef(Edit2.Text,1);//Divisor nochmal laden
  while (r18>1) do begin         //Ergebnis so oft...
    r20:=r20 shr 1;              //nach rechts schieben...
    r18:=r18 shr 1;              //...wie der Divisor lang ist.
  end;                           //Ende Schleife.
  Edit3.Text:=IntToStr(r20);     //Ergebnis ausgeben.
end;
Das Ergebnis wird immer ABgerundet, wer will kann den Code ja so midifizieren dass er richtig rundet. Ich denke, für natürliche Zahlen oder Festkommawerte ist das eine praktische Lösung. Oder weiss jemand was schnelleres? Bitte posten!

mfG

cht