; 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