# Befehl: debug

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

## Syntax:

      DEBUG [[Laufwerk:][Pfad]Dateiname [Argumente]]
            [Laufwerk:][Pfad]Dateiname  Gibt die Datei an, die getestet
                                        werden soll. Diese muss nicht
                                        ausfuehrbar sein. Es kann auch
                                        eine Binaer- oder Text-Datei sein.
                                        Daher muss auch die Dateinamens-
                                        Erweiterung angegeben werden.
            Argumente                   Befehlszeilenparameter fuer die
                                        zu testende Datei.
                                        Siehe Programmausfuehrung unten,
                                        fuer weitere Informationen ueber den
                                        Aufruf von ausfuehrbaren 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.

#### [Hauptseite] [oben] (Syntax) [Optionen] [Kommentar] [Beispiel] [Siehe auch] [Datei]

## 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 noetig. Dann wird fuer die
                             Groesse 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]  Ueberschreibt den Teil des Speichers, beginnend
                             ab der Adresse, mit der Liste der Bytes. Fuer
                             Eingabe einer Zeichenfolge setzen sie den Text
                             in Anfuehrungszeichen. Zum Beispiel:
                               E 100 "Hallo!"
        FUELLEN:
          F Bereich Liste    Ueberschreibt 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 koennen 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 fuer 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 aendern,
                             wenn sie nicht die urspruengliche Datei ueber-
                             schreiben moechten.
          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, ueber 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 gueltig, wenn der aktuellen
                             Prozessor ein 386er ist).
          M?                 (nur bei aelteren Versionen): Ausgabe des
                             aktuellen Prozessortyps.
          M                  Ausgabe des aktuellen Prozessortyps.

      Programmausfuehrung:
        GEHE ZU:
          G [=Adresse] [Haltemarken]
                             Beginnt die Ausfuehrung des geladenen Programmes
                             oder des Maschinencodes an der angegebenen
                             Adresse. Diese wird an dem Haltepunkt unter-
                             brochen, um den Speicher etc. untersuchen zu
                             koennen.
        FORTFAHREN:
          P [=Adresse] [Anzahl]
                             Mit der Ausfuehrung 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 (fuer CPUs ab 80386).
          RN                 Zeigt den FPU Register Status. DEBUG zeigt nur
                             die Roh-Hex-Werte der Register an, waehrend
                             DEBUGX die Werte im Floating-Point-Format an-
                             zeigt.
          RX                 Umschalten der Register-Anzeige von 8086 und
                             80386 (fuer 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 Anschluesse:
        EINGABE:
          I port             Einlesen von einem Port
          IW port            Einlesen von einem WORT Port
          ID port            Einlesen von einem Doppelwort Port
                             Doppelwort-Werte benoetigen 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 benoetigen 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.

#### [Hauptseite] [oben] [Syntax] (Optionen) [Kommentar] [Beispiel] [Siehe auch] [Datei]

## 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 koennen
      von 0000 bis FFFF reichen, was 64 Kilobytes umfasst.
      Ausfuehrbare Dateien mit der Endung .COM haben alle ihre Daten und
      Code in einem Segment. Fuer solche Dateien koennen 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 fuer Text-, Binaer-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 unterstuetzt alle oeffentlich
      dokumentierten Anweisungen fuer die Intel-Chips ueber den Pentium
      Pro (P6), mit Ausnahme von den MMX-Anweisungen. Diese informieren
      sie, wenn eine Anweisung nicht fuer den aktuellen Prozessortyp
      anwendbar ist. FPU Befehlscodes werden unterstuetzt.

#### [Hauptseite] [oben] [Syntax] [Optionen] (Kommentar) [Beispiel] [Siehe auch] [Datei]

## 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

#### [Hauptseite] [oben] [Syntax] [Optionen] [Kommentar] (Beispiel) [Siehe auch] [Datei]

## Siehe auch:

     (emm386)
      jemm386
      jemmex
      undelete

#### [Hauptseite] [oben] [Syntax] [Optionen] [Kommentar] [Beispiel] (Siehe auch) [Datei]

## Datei:

      Bitte lesen Sie auch die zum Befehl gehoerende lsm-Datei fuer
      die neueste (Internet) oder die in dieser Hilfe beschriebene
      Version des Befehls.
      Diese lsm-Datei enthaelt u.a. den Namen des Programmierers, die
      Downloadseite und einige andere Angaben.

#### [Hauptseite] [oben] [Syntax] [Optionen] [Kommentar] [Beispiel] [Siehe auch] (Datei)

      Copyright © 2003 Robert Platt, uebersetzt 2009 von J. Jenderek.

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