Befehl: debug

  DEBUG ist ein Nachbau des gleichnamigen MS-DOS Befehls. Einige
  kleinere Dinge sind nicht implementiert. Es unterstützt nicht nur
  die 8086/8088 und 8087 Register und Befehlssätze, sondern auch
  die 32bit Register und Befehlsätze bis zur PentiumPro CPU - mit
  Ausnahme der MMX-Erweiterungen. DEBUG ist ein relativ weit fort-
  geschrittenes DOS-Werkzeug für viele Anwendungen. Zum Beispiel
  kann es benutzt werden zum:
    * Finden von Fehlern in Programmen,
    * Erstellen von Programmen durch Assembler-Code,
    * Inspizieren und Bearbeiten von Binär-Dateien.

Syntax:

  DEBUG [[Laufwerk:][Pfad]Dateiname [Argumente]]
        [Laufwerk:][Pfad]Dateiname  Gibt die Datei an, die getestet
                                    werden soll. Diese muß nicht
                                    ausführbar sein. Es kann auch
                                    eine Binär- oder Text-Datei sein.
                                    Daher muß auch die Dateinamens-
                                    Erweiterung angegeben werden.
        Argumente                   Befehlszeilenparameter für die
                                    zu testende Datei.
                                    Siehe Programmausführung unten,
                                    für weitere Informationen über den
                                    Aufruf von ausführbaren Dateien.
  Nach dem Start von Debug erwartet das Programm hinter dem Bindestrich
  die Eingabe von Kommandos, wie Q zum Beenden oder ? zur Auflistung
  der Befehle.

Optionen:

  Q                      Beenden (Quit)
  ?                      Hilfe

  Inspektion und Bearbeiten vom Speicher:
    VERGLEICHEN (COMPARE):
      C Bereich Adresse  Vergleicht zwei Speicherbereiche und zeigt die
                         Unterschiede an. Nur die Start-Adresse des
                         zweiten Bereiches ist nötig. Dann wird für die
                         Größe die gleiche wie beim ersten angenommen.
                         Zum Beispiel:
                           C 100,110 200
                         vergleicht den Bereich von 100,110 mit 200,210.
    DUMP:
      D [Bereich]        Zeigt den Inhalt des Speicherbereiches. Ohne
                         Bereichsangabe werden 128 Bytes ausgegeben ent-
                         weder ab der Stelle der letzten DUMP Ausgabe
                         oder dem Beginn der geladenen Datei.
      DM                 Anzeige der DOS-Speicher-Steuerblock-Kette 
                         (Memory Control Block) und des aktuellen PSP.
    EINGABE:
      E Adresse [Liste]  Überschreibt den Teil des Speichers, beginnend
                         ab der Adresse, mit der Liste der Bytes. Für
                         Eingabe einer Zeichenfolge setzen sie den Text
                         in Anführungszeichen. Zum Beispiel:
                           E 100 "Hallo!"
    FUELLEN:
      F Bereich Liste    Überschreibt einen Speicherbereich mit einer
                         sich wiederholenden Liste von Bytes. Um etwas
                         auszunullen, benutzen sie zum Beispiel:
                           E 100,110 0
                         Zum Fuellen mit dem Text "brumbrum" benutzen
                         Sie:
                           E 100,107 "brum"
    VERSCHIEBEN (MOVE):
      M Quellbereich Zieladresse
                         Kopiert den Quellbereich in einen anderen be-
                         ginnend ab der Zieladresse.
    SUCHE:
      S Bereich Liste    Sucht nach alle Vorkommen der Liste von Bytes
                         in dem festgelegten Bereich und zeigt deren
                         Startadressen an.

  Berechnung von Zahlen in Hexadezimal:
    HEX
      H Wert1 Wert2      Zeigt die Summe und Differenz der zwei angege-
                         benen Zahlen. Doppelwort-Werte können gehand-
                         habt werden.

  Laden und Speichern von Dateien:
    LADE PROGRAMM ODER DATEI:
      L [Adresse]        Lade Programm.
      L Adresse Laufwerk Sektor Sektorzahl
                         Lade Sektor(en).
    NAMENSVERGABE:
      N [[Laufwerk:][Pfad]Programmnamen [Argumentenliste]]
                         Namen für die aktuelle Datei, Programm
                         festlegen.
    SCHREIBE (WRITE) PROGRAMM ODER DATEI:
      W [Adresse]        Schreibt das aktuelle Programm, Datei auf die
                         Platte. Verwenden Sie N, um den Namen ändern,
                         wenn sie nicht die ursprüngliche Datei über-
                         schreiben möchten.
      W Adresse Laufwerk Sektor Zahl
                         Schreibt Sektor(en).

  Assemblierung und Disassemblierung:
    ASSEMBLIERUNG:
      A [Adresse]        Assemblieren.
    DISASSEMBLIERUNG:
      U [Bereich]        Disassemblieren.
    80x86 MODUS:
      M[Einstellung]     Der aktuellen Prozessortyp (zum Zwecke der
                         Assembler und Disassembler Warnungen, siehe
                         oben) kann als etwas anderes vereinbart wer-
                         den, über die folgenden Befehle:
                           m0  Deklariert den aktuellen Typ als 8088
                           m1  Deklariert als 80186
                           m2  Deklariert als 286
                           m3  Deklariert als 386
                           m4  Deklariert als 486
                           m5  Deklariert als Pentium
                           m6  Deklariert als Pentium Pro
      MC                 Vereinbart die Existenz eines mathematischen
                         Coprozessors.
      MNC                Vereinbart das Fehlen eines mathematischen
                         Coprozessors.
      MC2                Deklariert den mathematische Coprozessor vom
                         Typ 287 (nur gültig, wenn der aktuellen
                         Prozessor ein 386er ist).
      M?                 (nur bei äteren Versionen): Ausgabe des
                         aktuellen Prozessortyps.
      M                  Ausgabe des aktuellen Prozessortyps.

  Programmausführung:
    GEHE ZU:
      G [=Adresse] [Haltemarken]
                         Beginnt die Ausführung des geladenen Programmes
                         oder des Maschinencodes an der angegebenen
                         Adresse. Diese wird an dem Haltepunkt unter-
                         brochen, um den Speicher etc. untersuchen zu
                         können.
    FORTFAHREN:
      P [=Adresse] [Anzahl]
                         Mit der Ausführung um die Anzahl der gegebenen
                         Schritte weitermachen.
    REGISTER:
      R [Register [Wert]]
                         Anzeige alle CPU-Register oder Anzeige/Setzen
                         eines Registers. Akzeptiert 32-Bit-Register-
                         Namen (für CPUs ab 80386).
      RN                 Zeigt den FPU Register Status. DEBUG zeigt nur
                         die Roh-Hex-Werte der Register an, während
                         DEBUGX die Werte im Floating-Point-Format an-
                         zeigt. 
      RX                 Umschalten der Register-Anzeige von 8086 und
                         80386 (für CPU ab 80386).
    VERFOLGUNG (TRACE):
      T [=Adresse] [Anzahl]
                         Verfolgung.
      TM [0|1]           Setzt den Trace-Kommando-Modus, 0=verarbeite
                         INTs (Standard), 1=Einzelschritt INTs(MS-DOS-
                         Debug kompatibeler Modus).

  I/O Anschlüsse:
    EINGABE:
      I port             Einlesen von einem Port
      IW port            Einlesen von einem WORT Port
      ID port            Einlesen von einem Doppelwort Port
                         Doppelwort-Werte benötigen eine CPU ab 80386.
    AUSGABE:
      O port Wert        Schreiben auf einen Port
      OW port Wert       Schreiben auf einen WORT Port
      OD port Wert       Schreiben auf einen Doppelwort Port 
                         Doppelwort-Werte benötigen eine CPU ab 80386.

  Expansionsspeicher(EMS)-Befehle (nur, wenn EMM v4.0 vorhanden ist):
    XA Nummer            Allozieren einer "leeren" EMS-Zugriffsnummer
                         mit Null Seiten.
    XD Nummer            Freigeben der Zugriffsnummer.
    XM logische-Seite physikalische-Seite Zugriffsnummer
                         Speicher abbilden.
    XR Nummer Zahl       Neuverteilung einer EMS Zugriffsnummer.
    XS                   Status anzeigen.
    X?                  Zeigt Hilfe zu X-Befehlen.

Kommentar:

  DEBUG verwendet hexadezimal (Basis 16). Speicher-Adressen werden in
  Segment:Offset Form angezeigt, z.B. 0D00:0100. Die letzten vier
  hexadezimalen Stellen, bestimmen den Abstand im Segment und können
  von 0000 bis FFFF reichen, was 64 Kilobytes umfasst.
  Ausführbare Dateien mit der Endung .COM haben alle ihre Daten und
  Code in einem Segment. Für solche Dateien können Sie in der Regel
  einfach nur den Offset bei der Angabe von Speicher-Adressen in Debug-
  Kommandos angeben. Es wird dann vom Programm-Segment ausgegangen.
  Das gleiche gilt auch für Text-, Binär-Dateien, die kleiner als
  64KB sind.
  Zur Angabe eines Speicherbereiches, trennen sie zwei Adressen mit
  einem Komma.
  Das Laden von .HEX-Dateien ist nicht implementiert.
  Der Assembler und Disassembler unterstützt alle oeffentlich
  dokumentierten Anweisungen für die Intel-Chips über den Pentium
  Pro (P6), mit Ausnahme von den MMX-Anweisungen. Diese informieren
  sie, wenn eine Anweisung nicht für den aktuellen Prozessortyp
  anwendbar ist. FPU Befehlscodes werden unterstützt.

Beispiel:

  Bootsektor (Sektor Nummer 0 mit 512 Bytes=0x200) vom Laufwerk C:
  (Nummer 2) in Datei BOOT_C.BIN auf erstem Diskettenlaufwerk sichern
  durch folgende Eingaben:
    A:
    cd \
    echo L 100 2 0 1 > BOOT_C.TXT
    echo RCX >> BOOT_C.TXT
    echo 200 >> BOOT_C.TXT
    N BOOT_C.BIN >> BOOT_C.TXT
    W >> BOOT_C.TXT
    Q >> BOOT_C.TXT
    DEBUG < BOOT_C.TXT

  Mit Hilfe von DEBUG im normalen Speicherbereich einer Grafikkarte
  nach charakteristischen Zeichenfolgen wie Jahreszahlen suchen um
  die Karte zu identifizieren:
    DEBUG
    S C000:0000,07FF "BIOS"
    S C000:0,7FF     "(C)"
    S c000:0,7ff     "199"
    s c000:0,7ff     "200"
    D C000:0000,100
    Q

Siehe auch:

 (emm386)
  jemm386
  jemmex
  undelete

  Copyright © 2003 Robert Platt, übersetzt 2009 von J. Jenderek.

  Diese Datei ist abgeleitet vom FreeDOS Spezifikationen-HOWTO.
  Vgl. auch die Datei H2Cpying bezüglich der Kopierbedingungen.