; Version fuer Assembler 2
CSEG SEGMENT 'CODE'
ASSUME CS:CSEG,DS:DSEG
MAIN PROC
MOV AX,DSEG ; Annahme DS = Segmentadresse DSEG erfuellen
MOV DS,AX
MOV AH,0Ah ; DOS-Funktionscode Zeichenkette einlesen
MOV DX,OFFSET EINGABE ; DS:DX zeigt auf EINGABE
INT 21h ; DOS-Funktion ausfuehren
MOV AH,2 ; DOS-Funktionscode Zeichen ausgeben
MOV DL,13 ; CR (Carriage Return)
INT 21h ; DOS-Funktion ausfuehren
MOV DL,10 ; LF (Line Feed)
INT 21h ; DOS-Funktion ausfuehren
MOV BX,OFFSET EINGABE ; DS:BX zeigt auf EINGABE
ADD BX,1 ; DS:BX zeigt auf EINGABE+1
MOV AL,[BX] ; tatsaechliche Laenge nach AX
MOV AH,0
ADD BX,1 ; DS:BX zeigt auf EINGABE+2
ADD BX,AX ; DS:BX zeigt auf das Ende der Zeichenkette
MOV [BX],'$' ; Dollarzeichen an das Ende der Zeichenkette
MOV AH,9 ; DOS-Funktionscode Zeichenkette ausgeben
MOV DX,OFFSET EINGABE ; DS:DX zeigt auf EINGABE
ADD DX,2 ; DS:DX zeigt auf Beginn der Zeichenkette
INT 21h ; DOS-Funktion ausfuehren
MOV AX,4C00h ; DOS-Funktionscode Programmende (EXIT-Code Null)
INT 21h ; DOS-Funktion ausfuehren
MAIN ENDP
CSEG ENDS
DSEG SEGMENT
EINGABE DB 20 ; maximale Laenge inkl. abschliessendes CR
DB ? ; tatsaechliche Laenge exkl. abschliessendes CR
DB 20 DUP (?) ; Speicherbereich Zeichenkette
DSEG ENDS
SSEG SEGMENT STACK
DW 128 DUP (?)
SSEG ENDS
END MAIN