Maschinensprache i8086/ Debug
Theorie:
Einleitung – Maschinensprache –
Assembler – Zahlensysteme –
RAM-Adressen – BWS – Debug –
CPU-Register – Einfache Befehle – Stringbefehle – Interrupts –
I/O-Ports
Versuch:
BWS1 – BWS2 –
Hallo Welt – Bootsektor – MBR
Nützlich:
Befehlsliste – PAUSE – Filter
Analyse:
Bootloader
Debug-Befehle
BearbeitenDas 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.