8 Stimmen

Wie funktioniert die Division in MIX?

Kann mir jemand erklären, wie Division in MIX (aus TAOCP von Knuth) auf einer Byte-zu-Byte-Basis funktioniert?

rA = |-| . . . .0| 

rX = |+|1235|0|3|1|

Der Speicherplatz 1000 enthält |-|0|0|0|2|0| .

Wenn Sie den Vorgang ausführen

DIV 1000

werden die Register

rA = |+|0|617|?|?|

rX = |-|0|0|0|?|1|

Jetzt verstehe ich die Zeichen auf rA et rX , aber in welcher Reihenfolge sind die Bytes von rAX gefüllt und welche Abteilungen sind fertig?

Wenn DIV 1000 dazu führt, dass jedes Bit durch 2 geteilt wird, dann würde ich erwarten

rAX = |+|617|0|1|0|-|0|1|0|1|1| 

in dem rA enthält die Teilungsergebnisse und rX die Reste (von der rechten Seite gefüllt).

Ich bin probaly etwas hier fehlt, und Knuth scheint zu denken, ich sollte in der Lage sein, es selbst herauszufinden (daher die Ebene 10 Fragen über sie, die ich auch nicht bekommen), aber könnte jemand mir hier helfen?

5voto

Ruben Steins Punkte 2722

Also habe ich es irgendwie selbst herausgefunden.

Wenn Sie die Division von Hand durchführen, indem Sie die Bytes in eine einzelne Zahl umwandeln, erhalten Sie -210.501.825 (wenn Sie die kleinste Art von Byte verwenden - in Knuths Buch sind das 6 Bits (!)). Dividieren Sie dies durch -128, das ist der Wert in Speicherplatz 1000 bei gleicher Bytesize.

Der Quotient ist 1644545, der Rest 65, das Vorzeichen wird positiv sein, da beide Zahlen negativ sind. Wenn Sie 1644545 in rA und 65 in rX speichern, erhalten Sie

|+|0|6|17|32|01|
|-|0|0|0|1|1|

unter Verwendung der kleinsten Bytesize (die 64 Zahlen enthält). Da Knuth in seinen Beispielen nie von einer bestimmten Bytesize ausgeht, hat rX eine Reihe von Fragezeichen. Das Vorzeichen von rX ist immer das vorherige Vorzeichen von rA.

Edit: Ich habe das sehr praktische MixEmul Utility, um mit den Registern von MIX zu spielen. Dies ist eine sehr schöne MIX-Implementierung in .NET

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X