02 Register, Speicher und Variablen

Einstieg in das Thema

Was brauchst du als Basiswissen?

Du kennst Register, Program Counter, Opcode und Befehlszyklus. Du kannst ein kurzes Programm im Applet schrittweise ausführen.

Worum geht es?

Variablen wirken in einer höheren Programmiersprache wie benannte Behälter. In Maschinensprache müssen Werte ausdrücklich in Register oder an Speicheradressen geladen werden.

Was ist das Ziel?

Du kannst Werte laden, zwischen Registern kopieren und im Arbeitsspeicher ablegen. Du unterscheidest sicher zwischen einem Wert und dem Inhalt einer Speicheradresse.

Erarbeitung

Theorie

Checkliste (für die KI oder den Lehrer)

  • 8-Bit-Register speichern Werte von 0 bis 255
  • LD kopiert einen Wert; die Quelle bleibt erhalten
  • Register A, B und C mit unmittelbaren Werten laden
  • Werte zwischen A und B, C, D, E, H oder L kopieren
  • Speicher als Folge nummerierter Zellen
  • Adresse bezeichnet einen Ort, Inhalt bezeichnet den dort gespeicherten Wert
  • Klammern bedeuten Zugriff auf den Inhalt einer Adresse
  • Unterschied zwischen LD A,1024 und LD A,(1024)
  • LD (1024),A schreibt; LD A,(1024) liest
  • 16-Bit-Adressen werden im Maschinencode Little Endian gespeichert

Video

Aufgaben

Z80-Befehlsreferenz

Die Referenz darf bei allen Aufgaben und später auch in der Prüfung verwendet werden. Es geht um das Verstehen und Anwenden der Befehle.

LD A,37 LD B,A LD A,0 LD A,B HALT
Aufgabe 1
Sage die Inhalte von A und B nach jeder Zeile voraus. Überprüfe deine Tabelle mit „Step“ und erkläre, weshalb B durch `LD A,B` nicht gelöscht wird.
Aufgabe 2
Schreibe ein Programm, das 12 nach C kopiert, A anschließend auf 0 setzt und den Wert aus C wieder nach A holt. Prüfe das Programm im Einzelschritt.
LD A,42 LD (1024),A LD A,0 LD A,(1024) HALT
Aufgabe 3
Verfolge Register A und Speicherzelle 1024. Beschreibe zu jeder LD-Zeile Quelle und Ziel in Worten.
Aufgabe 4
Vergleiche `LD A,42`, `LD A,1024` und `LD A,(1024)`. Einer dieser Befehle kann keinen 8-Bit-Wert 1024 in A speichern. Erkläre die drei Schreibweisen und beobachte, wie das Applet auf die Eingaben reagiert.
Aufgabe 5
Speichere nacheinander die Werte 15, 31 und 63 in den Speicherzellen 1024, 1025 und 1026. Lies danach den mittleren Wert nach A zurück. Kontrolliere die Speicheranzeige.
Aufgabe 6
Der Befehl `LD (1056),A` besitzt den Hexcode `32 20 04`. Erkläre, weshalb die Adresse 1056, hexadezimal 0420, im Maschinencode als `20 04` erscheint.
Aufgabe 7
Formuliere Gemeinsamkeiten und Unterschiede zwischen einer Variablen in einer bekannten Programmiersprache, einem Register und einer Speicherzelle. Gehe auf Namen, Adressen, Größe und Geschwindigkeit ein.

Zusammenfassung

Was muss man wissen und können?

LD kopiert Werte zwischen Registern und Speicherorten. Ein Registername bezeichnet ein Register. Eine Zahl ohne Klammern ist ein unmittelbarer Wert. Eine Zahl in Klammern bezeichnet den Inhalt dieser Speicheradresse. Adressen bestehen aus 16 Bit und werden im Code als niedriges Byte vor dem hohen Byte gespeichert.

Was können anschließende Themen sein?

Werte nur zu speichern genügt noch nicht. In der nächsten Lektion rechnen und vergleichen wir. Dabei lernen wir auch Statusinformationen kennen, mit denen der Prozessor Entscheidungen vorbereitet.