Maschinencode-Monitor

primitives Betriebssystem und Anwendungssoftware

Ein Maschinencode-Monitor ist ein Programmierwerkzeug oder ein primitives Betriebssystem, welches grundlegende Funktionalität auf einem Computer bereitstellt. Es ist typischerweise sehr klein und kann zum Starten oder Debuggen von weiteren Programmen genutzt werden.

Maschinencode-Monitore wurden typischerweise als Ersatz für ein Komplettbetriebssystem auf sehr frühen Heimcomputern (z. B. dem Apple I) und eingebetteten Systemen oder als BIOS-Äquivalent auf Workstations benutzt. Funktional nur knapp oberhalb der Maschinenkonsole, erlaubt es der Monitor mindestens, Daten aus Speicherzellen zu lesen und darauf zu schreiben sowie ein Programm ab einer beliebigen Speicheradresse auszuführen. Die Dateneingabe und -darstellung erfolgt typischerweise hexadezimal, kann aber durchaus auch im Binär- oder Oktalsystem erfolgen.

Auch einige spätere Heimcomputer (z. B. Apple II, Commodore 16) boten einen eingebauten Monitor als Low-Level-Ergänzung zum ebenfalls eingebauten höheren Betriebssystem. Auf anderen Rechnern (z. B. Commodore 64) konnte ein Monitor bei Bedarf als normales Programm von einem Massenspeicher in den Arbeitsspeicher geladen werden.

Zur Bedienung bieten Monitore üblicherweise nur eine einfache Kommandozeile.

Kommandos in einem Maschinensprachemonitor können etwa so aussehen:

200: 4C 00 02

Dies würde die drei angegebenen hexadezimal codierten Bytes an die Speicherstellen ab $0200 (d. h. hexadezimal 200) schreiben, die bei einem 6502-basierten Computer (z. B. Commodore 64) einen Sprung zur Adresse $0200 bedeuten, eine Endlosschleife also. Danach könnte mit einem Befehl wie

G 0200

(G für „Go“) diese Schleife dann ausgeführt werden. Deswegen gibt es im Monitor stets auch die Möglichkeit zum Abbruch eines laufenden Programms, meistens durch die Tastenkombination Ctrl+C.

Einfache Monitore benötigen, je nach der Codedichte der verwendeten CPU, nicht mehr als 200–300 Byte Speicher. Komfortablere Monitore verfügen teilweise über die Möglichkeit, Programmcode aus dem Speicher disassembliert in Assemblersprache auszugeben oder sogar einzelne Befehle in Assemblerschreibweise zu akzeptieren und diese dann als Maschinencode in den Speicher zu schreiben. Gegenüber einem echten Assembler fehlt aber fast immer die Möglichkeit, symbolische Adressen zu verwenden, so dass sich längere Programme kaum sinnvoll mit einem Monitor schreiben lassen.

Weitere mögliche Funktionalitäten, die man sonst bei Debuggern findet, sind Einzelschrittbetrieb mit der Möglichkeit, jeweils Veränderungen in den Prozessorregistern anzeigen zu lassen, sowie bei komplizierteren Adressierungsarten die Ergebnisse dieser Adressberechnungen, also die effektive Adresse, anzuzeigen.