; Lesen Sie von der Tastatur eine Dateiname. Listen Sie am Bildschirm ; den Inhalt dieser Datei aus, ausser den Ziffern. assume cs:code, ds:data, ss: stapel data segment msg db 'Name Der Datei: $' maxFileName db 12 lFileName db ? fileName db 12 dup (?) buffer db ? neueZeile db 13,10,'$' openErrorMsg db "Diese Datei existiert nicht.$" readErrorMsg db "Man kann aus der Datei nicht lesen.$" data ends code segment start: mov ax, data mov ds, ax ; Ausgabe der Botschaft msg mit Funktion 09h, int 21h mov ah, 09h mov dx, offset msg int 21h ; Wir lesen von der Tastatur den Name der Datei mit der Hilfe der ; Funktion 0ah, int 21h mov ah, 0ah mov dx, offset maxFileName int 21h ; Nach der Eingabe der Text, der Name der Datei wird auf die Adresse ; maxFileName + 2 = fileName gespeichert ; Auf die Adresse maxFileName + 1 = lFileName wird die Länge der ; Dateiname entsprechende Zeichenkette (String) gespeichert ; Wir wandeln den Dateiname in eine ASCIIZ Zeichenkette (String) mov al, lFileName xor ah, ah mov si, ax mov fileName[si], 0 mov ah, 09h ; den Kursor in eine neue Zeile springen lassen lea dx, neueZeile int 21h ; Wir öffnen die Datei mit der Funktion 3dh, int 21h mov ah, 3dh mov al, 0 ; Wir öffnen die Datei für Lesen mov dx, offset fileName int 21h jc openError ; Fehler bei der Dateiöffnung, wenn CF 1 ist mov bx, ax ; Wir speichern das Kennzeichen der Datei (File handle) ; in Register BX ; solange wir nicht am Ende der Datei sind, lesen wir aus der Datei ; und wir zeigen es am Bildschirm goOn: mov ah, 3fh mov dx, offset buffer mov cx, 1 ; wir lesen Charakterweise int 21h jc readError ; Im Fall des erfolgreichen Lesen wird die Funktion 3dh die Anzahl ; der gelesenen Oktette im Ax zurückgeben ; wir speichern die Anzahl der Oktette (0 oder 1) in si und wir testen ob ; das gelesene Charakter eine Ziffer ist oder nicht mov si, ax mov dl, buffer cmp dl,'0' jb nichtziffer cmp dl,'9' ja nichtziffer jmp goOn ; es ist ein Ziffer => wir sollen es nicht ausgeben, wir ; lesen also den nächsten Charakter ; wir zeigen am Bildschirm an was wir gelesen haben nichtziffer: mov ah, 02h ; das entsprechende ASCII Kode ist schon im Register dl int 21h cmp si, 1 je goOn ; Wenn wir 1 Oktett gelesen haben, heisst es dass wir ; mit dem Lesen noch nicht fertig sind. jmp endPrg ; wir springen die Behandlung der eventuelle Fehler durch openError: mov ah, 09h mov dx, offset openErrorMsg int 21h jmp endPrg readError: mov ah, 09h mov dx, offset readErrorMsg int 21h endPrg: mov ax,4c00h int 21h code ends stapel segment stack db 64 dup (?) stapel ends end start