Version 2.0 Aktualisiert: 30.03.04

.MODEL SMALL ;Standart Speichermodell fuer EXE
.STACK 100h ;100h Stack sind mehr als genug
.DATA ;Beginn des Datensegements
Frage DB "Geht es Ihnen gut (j/n)?$" ;Die Frage und die Antworten enden
Antwort1 DB 13,10,"Toll !$" ;mit einem $ um DOS zu zeigen, dass
Antwort2 DB 13,10,"Schade !$" ;es keine Zeichen mehr ausgeben soll
;13=Carriage Return
;10=Zeilenvorschub, d.h. zur naechsten
;Zeile an den Anfang gehen.
.CODE ;Beginn des Codesegmentes
mov ax,@data ;@data ist eine Vordefinierte Konstante,
;sie enthaelt die Adresse des
;Datensegments
mov ds,ax ;ds = ax = @data => Datensegment bereit
mov dx,OFFSET Frage ;Die Offsetadresse der Frage nach dx
mov ah,09h ;DOS Funktion 9: Stringausgabe.
;Ausgegeben wir der String an DS:DX
;bis $
int 21h ;DOS Funktion 9 ausfuehren!
mov ah,07h ;DOS Funktion 7: Zeichen von Tastatur
int 21h ;lesen. Das Zeichen wird in al
;ausgegeben.
cmp al,´j´ ;Vergleiche al mit j ACHTUNG SIEHE UNTEN
je Toll ;Wenn gleich Springe zum Label Toll
cmp al,´J´ ;Vergleiche al mit J ACHTUNG SIEHE UNTEN
je Toll ;Wenn gleich springe zum Label Toll
NichtToll: ;Dieses Label dient nur der Uebersicht.
mov ah,09h ;DOS Funktion 9: Stringausgabe
lea dx,Antwort2 ;Anstatt mov dx,OFFSET Antwort2
int 21h ;DOS Funktion ausfuehren.
jmp Ende ;Zum Label Ende springen.
Toll:
mov ah,09h ;Ausgabe der Antwort 1
lea dx,Antwort1
int 21h
Ende:
mov ah,4Ch ;DOS Funktion Programm beenden.
int 21h ;Programm beenden, Kontrolle ans
;Betriebssystem geben.
END ;Assembleranweisung: Ende des Programmes
--> Erstellen der EXE-Datei mit TASM Dateiname und TLINK Dateiname
Bsp.: Ihre Datei heisst frage.asm, tippen sie also: Tasm frage [Return] und dann Tlink frage[
Return].
Programm für eine COM Datei:
.MODEL TINY ;Speichermodell fuer COM Dateien
.CODE ;Daten kommen ebenfalls ins Codesegm.
ORG 100h ;Eine COM Datei muss im Speicher bei
;Offset 100h beginnen, ORG 100h definiert
;die Adresse des naechsten Befehls
;==> Mehr dazu spaeter !
;CS=DS=SS=ES, DS muss nicht initialisiert
;werden
Start: mov ah,09h
mov dx,OFFSET Frage
int 21h ;Frage ausgeben
mov ah,07h
int 21h ;Antwort nach al
cmp al,´j´ ;Vergleiche al mit j ACHTUNG SIEHE UNTEN
je Toll ;Wenn gleich Springe zum Label Toll
cmp al,´J´ ;Vergleiche al mit J ACHTUNG SIEHE UNTEN
je Toll ;Wenn gleich springe zum Label Toll
NichtToll:
mov ah,09h
lea dx,Antwort2
int 21h ;Antwort 2 ausgeben.
jmp Ende ;Zum Label Ende springen.
Toll:
mov ah,09h ;Ausgabe der Antwort 1
lea dx,Antwort1
int 21h
Ende:
mov ah,4Ch ;DOS Funktion Programm beenden.
int 21h
;Die Daten kommen erst am Ende, da diese sonst als Programmcode ausgefuert wuerden (es sei denn,
;man ueberspringt diese mit jmp), dies haette unvorhersehbare folgen. Nach der DOS Funktion 4Ch
;sind die Daten jedoch sicher, da das Programm ja vorher beendet wird bevor CS:IP die Daten
;erreicht.
Frage DB "Geht es Ihnen gut (j/n)?$"
Antwort1 DB 13,10,"Toll !$"
Antwort2 DB 13,10,"Schade !$"
END Start ;Definiert das Label Start als Eingangs-
;punkt (Entrypoint) bei COM Dateien kann ich keinen Sinn erkennen (es gehoert so) bei EXE
;Dateien hat man jedoch die Moeglichkeit den Entrypoint nicht nur an den Anfang des Programmes
;zu setzen, sondern auch in der Mitte oder sonstwo. Dies ermoeglicht der EXE Header.