Maschinensprache i8086/ Debug

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Theorie:  EinleitungMaschinenspracheAssemblerZahlensystemeRAM-AdressenBWSDebugCPU-RegisterEinfache BefehleStringbefehleInterruptsI/O-Ports
Versuch:  BWS1BWS2Hallo WeltBootsektorMBR
Nützlich: BefehlslistePAUSEFilter
Analyse:  Bootloader

Debug-Befehle[Bearbeiten]

Das Programm DEBUG dient zum Anzeigen und Ändern von Speicherinhalten, Prozessorzuständen und im Notfall - wenn kein Assemblerprogramm zur Verfügung steht - zur Eingabe kleiner Programme in Maschinensprache. Es ist ein mächtiges Werkzeug für Profis und wird mit jedem Microsoft Betriebssystem mitgeliefert.

Mit DEBUG kann man das Betriebssystem zum Absturz bringen, in sehr unglücklichen Fällen Daten verlieren und bei extremem Leichtsinn auch die Festplatte löschen. Schließen Sie alle nicht benötigten Programme, bevor Sie DEBUG benutzen. Wichtige Daten rechtzeitig zu sichern, ist immer eine gute Idee.

Die folgende Liste der DEBUG Befehle kann man sich vom Programm DEBUG anzeigen lassen, indem man ein Fragezeichen und Enter eingibt. Man kann sie auch in eine Datei DEBUGHLP.TXT umleiten, wenn man die folgenden drei Befehle eingibt (der zweite und dritte „blind“):

debug >debughlp.txt
?
q
Assemblieren A [Adresse]
Vergleichen C Bereich Adresse
Anzeigen D [Bereich]
Eingeben E Adresse [Liste]
Füllen F Bereich Liste
Starten G [=Adresse] [Adressen]
Hex rechnen H Wert1 Wert2
Einlesen I E/A-Anschluss
Laden L [Adresse] [Laufwerk] [ErsterSektor] [Anzahl]
Verschieben M Bereich Adresse
Benennen N [Pfadname] [Argumentenliste]
Ausgeben O E/A-Anschluss Byte
Ausführen P [=Adresse] [Anzahl]
Beenden Q
Register anzeigen R [Register]
Suchen S Bereichsliste
Verfolgen T [=Adresse] [Wert]
Deassemblieren U [Bereich]
Schreiben W [Adresse] [Laufwerk] [ErsterSektor] [Anzahl]
Expansionsspeicher reservieren XA [Seitenzahl]
Expansionsspeicher freigeben XD [Zugriffsnummer]
Expansionsspeicher zuordnen XM [LSeite] [PSeite] [Zugriffsnr]
Expansionsspeicherstatus anzeigen XS


Beim Aufruf von DEBUG werden alle Segmentregister auf die erste freie Segmentadresse gesetzt. Dadurch ist die Segmentadresse praktisch jedesmal eine andere, je nach aktueller Speicherbelegung. Schreibt man ein .COM Programm (das maximal 64k Byte RAM belegen darf), braucht man sich um die Segmentregister nicht zu kümmern. Wenn ein .COM-Programm vom Betriebssystem in den Speicher geladen wird, stellt das Betriebssystem alle Register auf den Anfang des freien Speichers.

Die allgemeinen Register (außer StackPointer) werden auf Null gesetzt. Weil jedem Programm vom Betriebssystem ein Program Segment Präfix der Länge 100H Byte vorangestellt wird (mit Informationen über die Betriebssystemumgebung), steht der Befehlszähler IP auf Adresse 100H. Gibt man bei den Befehlen D, U, A, E usw. keine Parameter an, beginnt die erstmalige Anzeige bzw. Eingabe ab dieser Offsetadresse 100H.