PREVIEW
Assembly Program Loader

Assembly Program Loader

Advanced signal_cellular_alt Advanced schedule 40 min

Interactive Circuit

Assemblerprogramm-Lader

Übersicht

  • Zweck: Der Assemblerprogramm-Lader ist eine spezialisierte Komponente, die Assemblerprogramme in binären Maschinencode umwandelt und in Speicherkomponenten lädt. Sie schlägt eine Brücke zwischen menschenlesbarem Assemblercode und den binären Befehlen, die digitale Schaltungen verarbeiten können.
  • Symbol: Der Assemblerprogramm-Lader wird durch einen rechteckigen Block mit Eingängen für Takt, Freigabe, Adress-Ausgangsfreigabe und Daten-Ausgangsfreigabe sowie Ausgängen für Adressbus, Datenbus, Schreibfreigabe, Chip Select und Ladeabschluss dargestellt.
  • DigiSim.io-Rolle: Ermöglicht das Testen und Ausführen von Assemblerprogrammen in CPU-Designs, ohne den Code manuell in Binärformat umwandeln zu müssen, und ist damit ein wesentliches pädagogisches Werkzeug zur Erforschung von Computerarchitekturkonzepten.

Assemblerprogramm-Lader-Komponente

Funktionsbeschreibung

Logikverhalten

Der Assemblerprogramm-Lader liest den vom Benutzer eingegebenen Assemblercode, wandelt ihn in Maschinencode um und schreibt ihn sequenziell an Speicheradressen. Er arbeitet als Zustandsautomat mit unterschiedlichen Phasen: Leerlauf, Laden und Abschluss.

Operationsablauf:

  1. Wenn der Lader ausgelöst wird (über seinen Eigenschaftsdialog), beginnt er mit dem Konvertierungsprozess
  2. An jeder steigenden CLK-Flanke, während EN HIGH ist, schreitet der Lader zum nächsten Befehl fort
  3. Während des Ladens sind die WE- und CS-Ausgänge HIGH
  4. Wenn das Laden abgeschlossen ist, geht der LC-Ausgang (Load Complete) auf HIGH
  5. Die Adressausgänge werden aktiv getrieben, wenn A_OE HIGH ist; die Datenausgänge werden aktiv getrieben, wenn D_OE HIGH ist

Eingänge und Ausgänge

  • Eingänge (4 insgesamt):

    • CLK: Pin 0. Takteingang – der Lader schreitet an jeder steigenden Flanke fort.
    • EN (Enable): Pin 1. Gesamtfreigabe für den Lader. Das Laden schreitet nur fort, wenn HIGH.
    • A_OE (Address Output Enable): Pin 2. Wenn HIGH, werden die Adressausgänge (A0-A7) getrieben; ansonsten hochohmig.
    • D_OE (Data Output Enable): Pin 3. Wenn HIGH, werden die Datenausgänge (D0-D7) getrieben; ansonsten hochohmig.
  • Ausgänge (19 insgesamt):

    • A0-A7: Pins 0-7. 8-Bit-Adressbus, der die Speicherstelle angibt, an die geschrieben werden soll.
    • D0-D7: Pins 8-15. 8-Bit-Datenbus mit dem Maschinencodebefehl, der in den Speicher geschrieben werden soll.
    • WE: Pin 16. Schreibfreigabe-Signal – HIGH während des aktiven Ladens.
    • CS: Pin 17. Chip-Select-Signal – HIGH während des aktiven Ladens.
    • LC (Load Complete): Pin 18. Geht auf HIGH, wenn das Laden abgeschlossen ist.

Konfigurierbare Parameter

  • Assemblerprogramm: Der Benutzer kann den Assemblercode über den Eigenschaftsdialog der Komponente eingeben und bearbeiten.
  • Speichergröße: Die maximale Anzahl an Befehlen, die geladen werden können (typischerweise begrenzt durch die angeschlossene Speicherkomponente).

Visuelle Darstellung in DigiSim.io

Der Assemblerprogramm-Lader wird als rechteckiger Block mit beschrifteten Eingängen auf der linken Seite (CLK, EN, A_OE, D_OE) und Ausgängen auf der rechten Seite (A0-A7, D0-D7, WE, CS, LC) dargestellt. In einer Schaltung visualisiert die Komponente ihren aktuellen Zustand durch die Werte an den Ausgängen. Der Benutzer kann über den Eigenschaftsdialog der Komponente mit ihr interagieren, um Assemblercode einzugeben und zu bearbeiten.

Pädagogischer Wert

Schlüsselkonzepte

  • Assemblerprogrammierung: Führt die grundlegenden Konzepte der Assemblersprache ein.
  • Maschinencodeerzeugung: Zeigt, wie menschenlesbare Assemblerbefehle in Binärformat umgewandelt werden.
  • Speicherverwaltung: Zeigt, wie Programme sequenziell in den Speicher geladen werden.
  • Computerarchitektur: Verbindet Softwarekonzepte mit der Hardware-Implementierung.
  • Befehlssatzarchitektur: Führt das Konzept von Befehlsformaten und -kodierung ein.

Lernziele

  • Die Beziehung zwischen Assemblersprache und Maschinencode verstehen.
  • Lernen, wie Programme zur Ausführung in den Speicher geladen werden.
  • Den Prozess der Übersetzung symbolischer Befehle in Binärformat erkennen.
  • Konzepte der Assemblerprogrammierung anwenden, um einfache Programme für CPU-Designs zu erstellen.
  • Die Schnittstelle zwischen Software und Hardware in Computersystemen verstehen.

Anwendungsbeispiele/Szenarien

  • CPU-Tests: Laden von Testprogrammen zur Verifikation der CPU-Funktionalität.
  • Demonstrationsschaltungen: Erstellen pädagogischer Beispiele zur Computerarchitektur.
  • Algorithmenimplementierung: Schreiben von Assemblerprogrammen zur Umsetzung einfacher Algorithmen wie Zählen, Addieren oder einfache Schleifen.
  • Speichersystemtests: Verifizierung von Speicher-Lese-/Schreibvorgängen in kontrollierter Weise.
  • Erkundung des Befehlssatzes: Experimentieren mit verschiedenen Befehlstypen und ihren Auswirkungen.

Technische Hinweise

  • Der Assemblerprogramm-Lader unterstützt eine vereinfachte Assemblersprache mit gängigen Befehlen (LDA, STA, ADD, SUB, JMP, JZ, JNZ, HLT).
  • Labels im Assemblercode werden während des Ladevorgangs automatisch zu Speicheradressen aufgelöst.
  • Bestimmte Speicherstellen können mit der Syntax @addr: value mit Datenwerten initialisiert werden.
  • Der Lader verarbeitet Befehle sequenziell, sodass größere Programme größere Speicherkomponenten erfordern können.
  • In DigiSim.io simuliert das Verhalten des Laders die Programmladephase eines echten Computersystems und abstrahiert dabei die Komplexität von Assemblern und Linkern.
  • Eine ordnungsgemäße Synchronisation mittels der WE-, CS- und LC-Signale ist wichtig bei der Integration des Laders mit anderen Komponenten.

Pins

Pin-Name Typ Pin-Index Beschreibung
CLK Eingang 0 Taktsignal – Lader schreitet an steigender Flanke fort
EN Eingang 1 Freigabe – Laden schreitet nur fort, wenn HIGH
A_OE Eingang 2 Adress-Ausgangsfreigabe – treibt den Adressbus, wenn HIGH
D_OE Eingang 3 Daten-Ausgangsfreigabe – treibt den Datenbus, wenn HIGH
A0-A7 Ausgang 0-7 8-Bit-Adressbus, der mit den Adresseingängen des Speichers verbunden ist
D0-D7 Ausgang 8-15 8-Bit-Datenbus, der mit den Dateneingängen des Speichers verbunden ist
WE Ausgang 16 Schreibfreigabe – HIGH während des aktiven Ladens
CS Ausgang 17 Chip Select – HIGH während des aktiven Ladens
LC Ausgang 18 Load Complete – HIGH, wenn das Laden abgeschlossen ist

Verwendung

  1. Verbinden Sie die Komponente mit Ihrer ROM- oder RAM-Komponente:

    • Verbinden Sie die A0-A7-Ausgänge mit den Adresseingangs-Pins Ihrer Speicherkomponente
    • Verbinden Sie die D0-D7-Ausgänge mit den Dateneingangs-Pins Ihrer Speicherkomponente
    • Verbinden Sie WE mit dem Schreibfreigabe-Eingang Ihrer Speicherkomponente
    • Verbinden Sie CS mit dem Chip-Select-Eingang Ihrer Speicherkomponente
  2. Geben Sie Ihr Assemblerprogramm im Eigenschaftsdialog der Komponente ein.

  3. Verbinden Sie CLK mit einer Taktquelle und setzen Sie EN, A_OE und D_OE auf HIGH, um das Laden zu starten.

  4. Die Komponente führt automatisch Folgendes aus:

    • Wandelt den Assemblercode in Maschinencode um
    • Schreibt den Maschinencode in aufeinanderfolgende Speicheradressen ab Adresse 0
    • Hält WE und CS während des Ladevorgangs HIGH
    • Setzt LC (Load Complete) auf HIGH, wenn der Vorgang abgeschlossen ist
  5. Warten Sie auf das LC-Signal, bevor Sie das Programm mit Ihrer CPU ausführen.

Unterstützte Assemblersprache

Der Assemblerprogramm-Lader unterstützt eine einfache Assemblersprache mit den folgenden Befehlen:

LDA addr    ; Akkumulator von Speicheradresse laden
STA addr    ; Akkumulator an Speicheradresse speichern
ADD addr    ; Wert an Speicheradresse zum Akkumulator addieren
SUB addr    ; Wert an Speicheradresse vom Akkumulator subtrahieren
JMP addr    ; Sprung zur Adresse
JZ addr     ; Sprung zur Adresse, wenn der Akkumulator null ist
JNZ addr    ; Sprung zur Adresse, wenn der Akkumulator nicht null ist
HLT         ; Ausführung anhalten

Beispielprogramm

Hier ist ein Beispielprogramm, das von 1 bis 10 zählt und das Ergebnis an Speicheradresse 15 speichert:

      LDA 14     ; 0 in den Akkumulator laden (von Adresse 14)
LOOP: ADD 13     ; 1 addieren (von Adresse 13)
      STA 15     ; Ergebnis an Adresse 15 speichern
      SUB 12     ; 10 subtrahieren (von Adresse 12)
      JZ END     ; Wenn Ergebnis null (10 erreicht), zu END springen
      LDA 15     ; Aktuellen Zählwert zurück in den Akkumulator laden
      JMP LOOP   ; Zurück zu LOOP springen
END:  HLT        ; Anhalten

; Datenabschnitt (muss irgendwo im Programm enthalten sein)
@12: 10          ; Wert 10 an Adresse 12
@13: 1           ; Wert 1 an Adresse 13
@14: 0           ; Wert 0 an Adresse 14

Tipps

  • Der Lader verarbeitet das Programm sequenziell und schreibt jeden Befehl in den Speicher
  • Labels (wie LOOP: und END:) werden automatisch zu Adressen aufgelöst
  • Verwenden Sie die Syntax @addr: value, um bestimmte Werte an bestimmten Adressen zu platzieren
  • Bei größeren Programmen müssen Sie eventuell die Größe Ihrer Speicherkomponente erhöhen
  • Prüfen Sie das LC-Signal, um eine ordnungsgemäße Synchronisation mit Ihrer CPU sicherzustellen
  • Die Komponente unterstützt Kommentare über das Semikolon (;)

school Lernpfad

arrow_back Voraussetzungen

help_outline Häufig gestellte Fragen

Was ist der Assembly-Programmlader?

Eine Komponente, die Assemblersprache in Maschinencode umwandelt und in RAM lädt, sodass Sie Ihre CPU-Designs programmieren und testen können.

Welche Assemblersyntax unterstützt DigiSim?

DigiSim unterstützt eine einfache Assemblersprache mit gängigen Befehlen (MOV, ADD, SUB, AND, OR, JMP usw.), die für Bildungszwecke konzipiert ist.

play_arrow Live-Schaltung ausführen

Weitere Komponenten ansehen