Akku- und Speichermaschine

Neue Frage »

Auf diesen Beitrag antworten »
Shizmo Akku- und Speichermaschine

So, eine habe ich noch großes Grinsen

Zitat:
Für zwei vorzeichenlose Zahlen [latex]Z1 = A*2^{16}+B, Z2 = C*2^{16}+D[/latex]
soll der mathematische Ausdruck [latex]E = A*C*2^{32} + (B*C+A*D)*2^{16} + B*D[/latex]
  1. mit einer Akku-Maschine: LOAD x, STORE x, ADD x, MULT x, SHL i
  2. mit einer Speicher-Maschine: ADD x, y, z, MULT x, y, z, SHL x, y, i
unter ausschließlicher Verwendung der jeweils angegebenen Opcodes berechnet werden.

i ist ein Immediate-Wert (z.B. 16).
Wir nehmen an, dass die Speicherstellen (A - E) und der Akku alle Ergebnisse aufnehmen können. Zwischenergebnisse können in zusätzlichen Speicherstellen ab F gespeichert werden. Sie sollten die Anzahl der Stores jedoch minimal halten.

Geben Sie jeweils den Assembler Code zur Berechnung obigen Ausdruckes an. Vergleichen Sie die Anzahl der Instruktionen und der notwendigen Speicherzugri ffe.


Schritt für Schritt.
Erstmal nur die Akku-Maschine.

SHL ist soweit ich weiß Shift-Left, was kann ich damit bewirken?

Kann ich damit die "Zahlen" aufteilen oder so?

LG
 
Auf diesen Beitrag antworten »
eulerscheZahl

Wenn du eine Zahl um 16 nach links shiftest, ist das das selbe wie sie mit [latex]2^{16}[/latex] zu multiplizieren.
Auf diesen Beitrag antworten »
Shizmo

Aha verwirrt

Was bringt mir das? geschockt
Auf diesen Beitrag antworten »
eulerscheZahl

LOAD A
LOAD C
MULT //A*C
SHL 32 //A*C*2^32 - das ist der erste Summand von E
 
Auf diesen Beitrag antworten »
Shizmo

Ah okay, Großartig großes Grinsen - Aber laut meinen Unterlagen würde bei dir A durch C überschrieben werden, da man nur einmal loaden darf, aber ich denke so dürfte dass dann hinkommen oder?

LOAD A
MULT C
SHL 32
STORE F

LOAD B
MULT C
STORE G

LOAD A
MULT D
ADD G
SHL 16
STORE G

LOAD B
MULT D
ADD G
ADD F
STORE F

Anzahl der Instruktionen wären es 17 und Speicherzugriffe 4.

Also das wäre jetzt [latex]E[/latex] - für was brauche ich Z1 und Z2??
Auf diesen Beitrag antworten »
eulerscheZahl

Sieht gut aus.
Z1 und Z2 ist die Eingabe, darüber musst du dir keine Gedanken machen.

Je nach Kosten für Addition und Multiplikation kannst du es auch mit 3 Multiplikationen lösen. Siehe Karatsuba.
Auf diesen Beitrag antworten »
Shizmo

Okay super, morgen mach ich weiter mit der Speichermaschine.

Wieso steht Z1 und Z2 dann überhaupt in der Angabe?
Also wir müssen solche Aufgaben immer an der Tafel vortragen und dann auch erklären, deshalb die Frage Zunge raus
Auf diesen Beitrag antworten »
eulerscheZahl

Stelle dir einfach vor, du hast 32Bit große Zahlen, aber der Prozessor kann nur 16Bit auf einmal rechnen. Da musst du die Rechnung aufteilen.
Auf diesen Beitrag antworten »
Shizmo

Alles klar okay danke, ich habs jetzt mal aufgeteilt und Z1 mit Z2 multipliziert und spare mir dadurch 8 Instruktionen, so sollte es doch auch passen oder? (Immer noch Akkumaschine)

LOAD A
SHL 16
ADD B
STORE F

LOAD C
SHL 16
ADD D

MULT F
STORE F

Wären dann nur 9 Instruktionen und 2 Speicherzugriffe.
Auf diesen Beitrag antworten »
eulerscheZahl

Bleibt eben die Frage, ob deine Zielarchitektur die Multiplikation zweier 32Bit Zahlen unterstützt.
Wenn sie das tut, geht das.
Auf diesen Beitrag antworten »
Shizmo

So jetzt musst du mir aber trotzdem noch helfen mit der Speicher-Maschine. Also da ich da ja keinen LOAD und STORE befehl habe, brauche ich es nicht laden und die Speicher-Maschine kann es wahrscheinlich zwischenspeichern.
Aber wie gehe ich da vor?
Auf diesen Beitrag antworten »
eulerscheZahl

Da bin ich raus, mit dem Begriff Speichermaschine kann ich gar nichts anfangen.
Auf diesen Beitrag antworten »
Shizmo

Okay, vielen Dank trotzdem für deinen Einsatz!! Daumen hoch
Auf diesen Beitrag antworten »
Shizmo

Noch als Ergänzung, mit Speichermaschine ist eine Register-Register Maschine gemeint.

Also:

SHL E A 16
ADD F E B

SHL E C 16
ADD G E D

MULT E F G

LG Augenzwinkern
 
Neue Frage »
Antworten »


Verwandte Themen