Tom: Division 16-Bit durch 16-Bit

Beitrag lesen

Hello,

Ich muss nun einmal 16 durch 16-Bit teilen. Kann mir jemand das Grundprinzip erklären? Wenn ein ASM-Code gleich dabei ist, umso besser.

Ich verstehe jetzt nicht, wo da das Problem ist.

Du legst in einem Register den Startwert (Dividend) ab. [2]
Im anderen Register legst Du den Divisor ab. [2]
Ein drittes Register benutzt Du zum zählen. [2]

Nun baust Du eine Schleife auf, in der vom Dividenden der Divisor so fot abgezogen wird, bis der Dividend kleiner ist (oder Null [1]), als der Divisor. Ist dieser Punkit erreicht, hast Du im Zählerregister den Quotienten und im Dividenden-Register den Rest stehen.

Interessant an der Sache ist,
[1} Grenzen betrachten:

Wenn Du dich der Grenze des Definitionsbereiches näherst, musst Du diese sauber erkennen. Es ist also wichtig, ob Du negative Zahlen zulässt, oder nicht. Durch den Überschlag [3] kann es sonst zu falschen Ergebnissen führen.

[2] Welches Register wofür verwenden:
Das hängt vom Prozessor und teilweise auch ungeschriebenen Konventionen ab.
I.d.R. wird z.B. das C*-Register zum Zählen verwendet. Das hängt meistens davon ab, welche Assemblerbefehle bestimmte Register voraussetzen.

[3] Das Überschreiten einer Grenze, also ein Überchlag, wird i.d.R. in einem speziellen Register oder einem Flag angezeigt (z.B. Carry-Flag). Oft muss man die Flags erst in ein Register laden, um sie abfragen zu können, manchmal gibt es aber auch spezielle Assembler-Befehle, um einzelne Flags gezielt abzufragen.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de