ISA-Effizienzcodekomprimierung und Speicherverkehr

Ich habe Probleme, dieses Problem zu verstehen, und bin neu bei ISA. Hier ist ein Problem mit 3 Fragen und meine größte Frage ist, was soll passieren? Insbesondere der HLL-Code ganz unten.

Angenommen, vier ISAs

  1. akkumulatorbasiert
  2. Stack-basiert
  3. Memory-to-Memory (Operanden liegen im Hauptspeicher)
  4. registerbasiert (reines Laden/Speichern)

Befehls-/Datengröße

  • alle Datenoperanden 4 Byte
  • alle Speicheradressen sind 16 Bit
  • alle Opcodes 1 Byte
  • Speicheradressfelder 2 Bytes breit
  • Registerfelder in der Lade-/Speichermaschine sind 4 Bit breit (16 32-Bit-Register)

Darüber hinaus sind alle Speicheradressen 32 Bit lang und alle Anweisungen und Daten werden im Fall der Speicher-Speicher-Architektur in einem einzigen Speicherzugriff abgerufen, ohne dass zusätzliche Speicherplätze verwendet werden müssen.

Kompilieren Sie Code für vier ISAs und bestimmen Sie die Metriken: 1) Codegröße 2) Datenspeicherverkehr, einschließlich Adressen, 3) Befehlsverkehr, einschließlich Adressen.

HLL-Code:

 A = B + A
 C = A - C + D
Was hast du bisher versucht? Außerdem stimmen deine Angaben nicht überein. Ein Punkt sagt, dass Adressen 16 Bit lang sind, während ein anderer sagt, dass sie 32 Bit lang sind.
@DaveTweed es scheint inkonsistent zu sein, aber es ist Wort für Wort aus einem Buch übernommen, das ich durchzustehen versuche. Ist es möglich, dass es zwei Arten von Speicheradressen gibt? Ich habe es etwas umformuliert. Bisher habe ich eine Tabelle für die vier ISAs mit 3 Zeilen (Codegröße, Datenverkehr, Befehlsverkehr) erstellt.
Dies ist eindeutig eine Frage, die von all dem Material abhängt, das ihr in dem Buch vorangestellt wurde. Vermutlich diskutierten sie die wesentlichen Merkmale der vier in dieser Frage aufgeführten ISAs. Ihre Aufgabe besteht darin, für jede der ISAs, die die angegebene HLL-Funktionalität implementieren, eine vernünftige Befehlssequenz zu entwickeln und dann die Speicherzugriffsmuster jeder dieser Sequenzen zu analysieren. So wie es aussieht, ist die Frage viel zu weit gefasst, um sie hier zu beantworten. Haben Sie einen bestimmten Punkt oder ein bestimmtes Konzept, das Ihnen Probleme bereitet?

Antworten (1)

Als Hinweis für den Einstieg sind hier einige mögliche Befehlssequenzen für die erste HLL-Anweisung:

Akkumulatorbasiert

load A
add B
store A

Stack-basiert

load A
load B
add
store A

Speicher-zu-Speicher (2-Adresse)

add B, A

Registerbasiert

load A, r1
load B, r2
add r2, r1
store r1, A

Ihre Aufgabe ist es, herauszufinden, wie groß jeder Befehl ist und wie die Speicherzugriffsmuster sowohl für Befehls- als auch für Datenoperationen sind, wenn jede Sequenz ausgeführt wird.