[Assembler] Frage zu Compilern

el guapo

Lt. Commander
Registriert
Feb. 2002
Beiträge
1.327
Ich wüsste gerne, was genau in den von Compilern erzeugten *.lst-Dateien drin steht (allgemein). Weiß das jemand? Ich meine, ich kann es mir ja ansehen, aber wozu ist das gut und was bedeutet das?
 
Welcher Compiler? Welche Programmiersprache?
So eine Datei wird nicht "prinzipiell" bei allen Compilern erzeugt. Ich denke mal, dass das eine spezielle Datei von einem speziellen Compiler ist.
 
Also bei den von mir benutzten Compilern gibt es das auch und das sind einfach die Assembler-Listings...

Also der ganze Programmcode inklusive aller unterprogramme etc. in einer datei als Assemblercode...

bei hardware nahen anwendungen (Mikrokontroller )braucht es das fürs debugging etc.
 
Naja, es ist Assembler, wir benutzen hier ne alte Turbo Assembler Version für den 8086er.

Der Inhalt sieht zum Beispiel so aus

Code:
      1				     ;	  MASM - Version
      2				     ;	  Bildschirmadresse BILD at      
      3				     ;			                        		     ;------------------------------------------------
      5
      6	      =0019		     LINES   equ     25
      7	      =0050		     PIXEL   equ     80
      8	      =FF20		                     LEER    equ     0FF20h
      9
     10				     ;------  Bildspeicher ---------------------------
     11
     12	      =B800		     BILD equ 0B800h
     13
     14				     ;------ Stapel ----------------------------------
     15
     16	0000			     STAPEL  segment stack 'stack'
     17	0000  64*(????)			     dw	     100 dup (?)
     18	00C8			     STAPEL  ends
     19
     20				     ;------  Programm-Code -----------------------
     21
     22	0000			     HAUPT    segment
     23					      assume cs:HAUPT, ds:BILD
     24
     25	0000  B8 B800		     START:   mov    ax, BILD	      ;	
     26	0003  8E D8			      mov    ds, ax	      ;	ers
     27
     28	0005  B8 FF20			      mov    ax, LEER	      ;	         29	0008  33 DB			      xor    bx, bx	      ;	Adresse	des ersten Zeichens
     30								      ;	(xor effizienter als mov bx, 0)
     31	000A  B9 07D0			      mov    cx, LINES*PIXEL  ;
     32
     33	000D  B8 0003			      mov    ax, 0003h
     34	0010  CD 10			      int    10h	      ;	setze VidMode
     35
     36	0012  B8 FF20			      mov    ax, LEER
     37
     38	0015  89 07		     CLS:     mov    [bx], ax	      ;	Schreibe Zeichen von ax	-> Bildspeicher
     39	0017  43			      inc    bx		      ;	naechstes  Zeichen
     40	0018  43			      inc    bx
     41	0019  E2 FA			      loop   CLS
     42
     43	001B  B9 0010			      mov    cx, 16	      ;	entspricht der "Hoehe"
     44	001E  BB 0220			      mov    bx, 544	      ;	Ausrichtung der	ersten Zeile
     45	0021  32 C0			      xor    al, al	      ;	al = Zeichen (=	mov al,	0)
     46	0023  32 E4			      xor    ah, ah	      ;	ah = Hintergrund + Vordergrund (= mov al, 0)
     47
     48	0025  51		     ZEILE:   push   cx
     49	0026  B9 0010			      mov    cx, 16	      ;	entspricht der "Breite"
     50
     51	0029  89 07		     SPALTE:  mov    [bx], ax	      ;	Schreiben in den Bildspeicher
     52	002B  43			      inc    bx		      ;	Ruecke Position	vor
     53	002C  43			      inc    bx
     54	002D  FE C0			      inc    al		      ;	Ruecke Zeichen in Tabelle vor
     55	002F  FE C4			      inc    ah		      ;	Ruecke Farbe vor
     56	0031  E2 F6			      loop   SPALTE
     57
Turbo Assembler	 Version 4.0	    09/06/03 21:01:07	    Page 2
C:\HWL\HWL1-2\ASCII.ASM



     58	0033  81 C3 0080		      add    bx, 128	      ;	Anordnung der naechsten	Zeile (Abstand)
     59	0037  59			      pop    cx
     60	0038  E2 EB			      loop   ZEILE
     61
     62
     63	003A  B4 4C			      mov    ah, 4Ch	      ;	Ende
     64	003C  CD 21			      int    21h
     65
     66	003E			     HAUPT    ends
     67					      end    START
Turbo Assembler	 Version 4.0	    09/06/03 21:01:07	    Page 3
Symbol Table




Symbol Name			  Type	 Value

??DATE				  Text	 "09/06/03"
??FILENAME			  Text	 "ASCII	  "
??TIME				  Text	 "21:01:07"
??VERSION			  Number 0400
@CPU				  Text	 0101H
@CURSEG				  Text	 HAUPT
@FILENAME			  Text	 ASCII
@WORDSIZE			  Text	 2
BILD				  Number B800
CLS				  Near	 HAUPT:0015
LEER				  Number FF20
LINES				  Number 0019
PIXEL				  Number 0050
SPALTE				  Near	 HAUPT:0029
START				  Near	 HAUPT:0000
ZEILE				  Near	 HAUPT:0025

Groups & Segments		  Bit Size Align  Combine Class

HAUPT				  16  003E Para	  none
STAPEL				  16  00C8 Para	  Stack	  STACK

Ist hier leider etwas zerstückelt; was ich gerne wüsste: was bedeuten weiter oben die Zahlen auf der linken Seite? Ich meine nicht die Nummerierung, sondern die Zahlen rechts daneben. Nach meinem Verständnis ist das eine Art Befehlsnummerierung. Und was ist das rechts DAVON?
 
Links = relative Adresse im Speicher innerhalb des aktiven Segments
Also, z.B. CODE Segment CS (genannt HAUPT ) beginnt an Adresse 0 den eigentlichen Programmcode zu speichern. Z.b. wurde die Konstante BILD deklariert, welche auf den Beginn des Bildwiederholspeichers zeigt (im Textmodus = B800h), die im Codesegment verwendet wird:
Ab Adresse 0000 stehen 3 Befehlsbyte: MOV AX, Wert = B8 ("MOV AX") + Wert (B800h). Dann, ab Adresse 0003 die Opcodes fuer die naechste Befehlszeile.

Also, kurz gefasst: fuer jede Zeile des Assemblercodes die genaue Speicherzuordnungsadresse und die binaeren Opcodes fuer die Befehle, danach die eigentlichen Befehle.
 
Zuletzt bearbeitet:
Zurück
Oben