home *** CD-ROM | disk | FTP | other *** search
/ Best of German Only 1 / romside_best_of_german_only_1.iso / anwender / sim / sim51_04.arj / DIS51.DOC < prev    next >
Text File  |  1992-12-31  |  9KB  |  223 lines

  1.  
  2.     DIS51 Disassembler für HEX-Code der 8051 Familie
  3.     ================================================
  4.  
  5.  
  6. DIS51 wurde in Assembler-Sourcecode geschrieben und mit MASM 5.10 compiliert.
  7.  
  8. DIS51 lädt Code für 8051-CPU's im HEX-, ABSOUT- oder BINÄR-Format. Der Code
  9. wird Schritt für Schritt durchgegangen. Nur die 8051-Befehle, die dabei be-
  10. rüht werden, werden in Mnemonics disassembliert. Die anderen Code-Bytes blei-
  11. ben als DB-Direktive stehen.
  12.  
  13. Der erzeugte Code (Memomics) entspricht den Regeln für den ASM51 von Intel.
  14.  
  15.  
  16.  
  17.  
  18. Source-File:
  19. ------------
  20. Disassembliert werden können nur Files, die Code in (Intel-) HEX-, ABSOLUT- 
  21. oder BINÄR-Format beinhalten. Default wird ein HEX- oder ABSOLUT-File erwar-
  22. tet. Die Unterscheidung erfolgt automatisch anhand des ersten Bytes des
  23. Source-Files: Beim HEX-File steht dort ':' und beim ABSOLUT-File 02h für
  24. Modul-Open Record Typ.
  25. Handelt es sich bei dem Source-File um einen BINÄR-File, so ist dem File-
  26. Namen beim Aufruf ein '$' voranzustellen.
  27.  
  28. (Anmerkung: Intel ASM51 produziert OBJECT-Code, RL51 produziert ABSOLUT-
  29.    Code und OH51 produziert HEX-Code. BINÄR-Code wird bei einigen Eprommern
  30.    und einfacheren Assemblern verwendet. Der TASM erzeugt nur HEX- oder
  31.    Binär-Code.)
  32.  
  33.  
  34.  
  35. Output-File:
  36. ------------
  37. DIS51 generiert als Output-File einen Assembler-Source-File. Dieser File ist
  38. durch den ASM51 von Intel wieder direkt reassemblierbar. Er erhält denselben
  39. Namen wir der Input-File, jedoch mit der Endung "d51" (Achtung: existierende
  40. Files mit diesen Namen werden überschrieben).
  41.  
  42.  
  43. Beispiel für einen von DIS51 erzeugten Assembler-Source-File:
  44. ╔═══════════════════════════════════════════════════════════════════════════╗
  45. ║ $NOMOD51                                    ║
  46. ║ ;Disassembler Outputfile                  DIS51 Ver 2.0 (c) 1991 W.Hennig ║
  47. ║ ;------------------------------------------------------------------------ ║
  48. ║ ; Source File: BASIC52.HEX                            ║
  49. ║                                         ║
  50. ║ ;PUBLIC Timer2                                ║
  51. ║                                        ║
  52. ║ _0064    CODE 64h    ;EXTRN CODE(_0064)                    ║
  53. ║ _402B    CODE 402Bh    ;EXTRN CODE(_402B)                    ║
  54. ║                                        ║
  55. ║ $INCLUDE(\ASM51\INC\reg52.pdf)                        ║
  56. ║                                        ║
  57. ║ ORG 2Bh                                    ║
  58. ║ ;Timer2:                                    ║
  59. ║      PUSH    PSW            ;002B  C0 D0                ║
  60. ║      JB    20h, _0033        ;002D  20 20 03                ║
  61. ║      LJMP    _402B            ;0030  02 40 2B                ║
  62. ║ _0033:  SETB    RS1            ;0033  D2 D4                ║
  63. ║      CLR    RS0            ;0035  C2 D3                ║
  64. ║      MOV    R7, ACC            ;0037  AF E0                ║
  65. ║      MOV    R0, 0h            ;0039  A8 00                ║
  66. ║      SJMP    _0064            ;003B  80 27                ║
  67. ║      DB    45h    ;'E'        ;003D  45                ║
  68. ║      DB    58h    ;'X'        ;003E  58                ║
  69. ║      DB    49h    ;'I'        ;003F  49                ║
  70. ║      DB    54h    ;'T'        ;0040  54                ║
  71. ║                                        ║
  72. ║ END                                        ║
  73. ╚═══════════════════════════════════════════════════════════════════════════╝
  74.  
  75. Die vom Anwender definierten Einsprungadressen werden hinter dem ASM51-
  76. Schlüsselwort PUBLIC angegeben. Die Eintragung ist aber durch ein ; als
  77. Kommentar gekennzeichnet.
  78.  
  79. Für Adressen werden grundsätzlich Labels verwendet. Der disassemblierte
  80. Code kann so, mit einer anderen ORG-Direktive versehen, reassembliert
  81. werden. Adressen, die nicht innerhalb des geladenen Codes liegen, werden
  82. mit einer CODE-Direktive definiert. Dahinter steht mit einem ; die ent-
  83. sprechende EXTRN-Direktive. Vor der Reassemblierung kann der Anwender
  84. die eine oder andere Eintragung stehen lassen.
  85.  
  86. Wenn innerhalb des Codes ein Sprung auf eine Adresse erfolgt, steht links 
  87. ein Label. Ist der Adresse ein Variablenname zugeordnet (default, über einen
  88. Include-File oder aus einem Absolut-File), so wird dieser Name eingetragen. An-
  89. sonsten wird dafür die Adresse mit einem vorgestellten _ verwendet. Vor 
  90. Labels, die beim ASM51 vordefiniert sind, steht ein ; damit der Assembler
  91. keinen Fehler anzeigt.
  92.  
  93. In der Mitte stehen die Mnemonics. Für Daten-Adressen (DATA, BIT) werden,
  94. wenn definiert, die Variablen-Namen eingetragen.
  95.  
  96. Rechts ist als Kommentar die Code-Adresse gefolgt von dem ursprünglichen
  97. Hexcode angegeben.
  98.  
  99. Wurde eine geladene Code-Adresse mit den angegebenen Einsprung-Adressen 
  100. nicht erreicht, so bleibt sie als DB-Direktive stehen. Es könnte sich 
  101. ja auch um eine Tabelle oder einen Text handeln. Als Kommentar ist das 
  102. entsprechende ASCII-Zeichen angegeben. Allerdings werden ASCII-Zeichen 
  103. kleiner 20h nicht angegeben, da viele Zeichen unter 20h als Steuerzeichen
  104. bei Druckern dienen. Zusätzlich werden die Zeichen ascii25h = % und 
  105. ascii27h = ' nicht angegeben, da sonst ASM51 Fehler macht. Dasselbe gilt
  106. auch für ASCII-Codes größer 80h, die ASM51 gar nicht behandelt, und von
  107. denen einige selbst in Kommentaren bei der Re-Assemblierung zu Fehlern
  108. führen:  ascii8Ah, ascii8Dh, asciiA5h, asciiA7h.
  109.  
  110.  
  111.  
  112.  
  113. Variablen-Namen:
  114. ----------------
  115. Ebenso wie der ASM51-Assembler verwendet DIS51 default die SFR-Definitionen
  116. des 8051. Zusätzlich oder als Ersatz kann ein Include-File mit weiteren oder
  117. anderen SFR-Definitionen angegeben werden.
  118.  
  119.  
  120. Ein Include-File für DIS51 darf nur folgende ASM51-kompatible Direktiven be-
  121. inhalten:
  122.         CODE, XDATA, DATA, IDATA, BIT, EQU
  123.  
  124. Andere ASM51-Direktiven werden nicht unterstützt. Natürlich sind Kommentare
  125. innerhalb des Include-Files erlaubt. Als Kommentar gelten alle Zeichen inner-
  126. halb einer Zeile, die einem ; folgen.
  127.  
  128.  
  129. Wird bei DIS51 der Schalter NOMOD51 gesetzt, so sind die 8051-spezifischen
  130. Register Definitionen abgeschaltet. Die Code-Einsprünge für 
  131.  
  132.     RESET, EXTI0, EXTI1, Timer0, Timer1, SINT 
  133.  
  134. bleiben vordefiniert (genauso wie bim ASM51). Im Output-File wird $NOMOD51
  135. eingetragen.
  136.  
  137. Ist nicht NOMOD51 gewählt, so sind default alle SFR des 8051 definiert. Der
  138. ASM51-Assembler hat hier jedoch einen kleinen Fehler: er kennt PCON nicht.
  139. Diese eine Definition wird von DIS51 deßhalb in den Output-File geschrieben.
  140.  
  141.  
  142. Wird ein Absolut-File geladen, so übernimmt DIS51 die SFR-Definitionen aus
  143. dem Absolut-File (soweit vorhanden). Ein Absolut-File enthält nur dann 
  144. SFR-Definitionen, wenn bei der Assemblierung mit dem ASM51 der Schalter 
  145. DEBUG gesetzt war. Sind CODE-Definitionen enthalten, so werden diese CODE-
  146. Adressen als Einsprung-Adressen markiert.
  147.  
  148.  
  149. Bei der Disassemblierung werden Code-, Data-, und Bit-Adressen durch die vor-
  150. definierten Variablen ersetzt. In einer internen Liste von DIS51 stehen die 
  151. geladenen SFR-Definitionen der Reihe nach:
  152.         jene aus dem Absolut-File
  153.         die default bekannten 8051-SFR (wenn nicht -nomod51)
  154.         jene aus dem Include.File
  155.     
  156. Der bei der Disassemblierung zuerst gefundene Variablenname (zu einer Adresse)
  157. wird eingesetzt, auch wenn noch andere Variablennamen für die gleiche Adresse
  158. definiert sind.
  159.  
  160.  
  161.  
  162. Aufruf:
  163. -------
  164. Der Disassembler kann mit folgenden Parametern aufgerufen werden:
  165.  
  166. DIS51        Es erscheint erst eine Erklärung zum Aufruf.
  167.  
  168.  
  169. DIS51 <$>source <-nomod51> <-iInclude> <-Adr> <-Adr> ...    Die Angaben
  170.                                 in <> sind
  171.         optional. Der Source-File muß Code im HEX- oder im ABSOLUT-
  172.         Format enthalten. Es können auch BINÄR-Files geladen werden,
  173.         Dann ist ein $ voranzustellen. Die obige Reihenfolge ist
  174.         einzuhalten. Es können so viele Einsprungadressen eingegeben
  175.         werden, bis die Eingabezeile voll ist.
  176.  
  177.  
  178. DIS51 @inputFile    Die Parameter können optional über einen Input-File
  179.             eingegeben werden. Innerhalb des Input-Files ist
  180.         dieselbe Reihenfolge einzuhalten wie oben.
  181.         Ansonsten können an beliebiger Stelle SPACE, TAB, Carriage-
  182.         Return oder Kommentar stehen. 
  183.         Als Kommentar werden alle Einträge gewertet, die nicht durch
  184.         ein - eingeleitet werden. Der erste Eintrag im Input-File
  185.         muß der Source-Filename sein (ohne vorangestelltes -).
  186.         Innerhalb von Kommentaren darf kein - verwendet werden! Bei
  187.         zu großen Input-Files werden nur die ersten 8 kByte ausgewer-
  188.         tet.
  189.         Die Fehlermeldung: 
  190.             *** Einsprungadressen hinter - als Hexzahl angeben
  191.         deutet meißt auf ein - innerhalb eines Kommentars hin.
  192.  
  193.  
  194.  
  195.  
  196. Arbeitsweise:
  197. -------------
  198. Der Disassembler ließt zuerst die Eingaben (von Input-File oder Tastatur). 
  199.  
  200. Der 8051-Code wird in ein eigenes Segment (64 kByte) geladen. In einem 
  201. weiteren Buffer (32 KByte) wird für jedes Code-Byte ein Flag (Nibble) ge-
  202. setzt