Programmierung

EASy68K – Datei lesen ohne NULL

Mittlerweile habe ich herausgefunden, wie man eine Datei liest und den Inhalt in die Konsole ausgibt, wenn die Datei kein NULL-Zeichen am Ende der Datei enthält (was gerade bei String-Ausgaben wichtig ist). Hierbei lese ich Zeichen für Zeichen ein, gebe Zeichen für Zeichen aus und prüfe jedesmal, ob schon das Ende der Datei erreicht worden ist (siehe Programmcode). Das ist zwar eine etwas langsame Variante, aber funktionieren tut sie dennoch (und ich lerne momentan noch). Also hier der Programmcode:

;-----------------------------------------------------------
; Title      :
; Written by :
; Date       :
; Description:
;-----------------------------------------------------------
    ORG    $1000
START:                  ; first instruction of program
 
; Put program code here
        ; Datei 'test1.txt' lesen
        LEA         FILENAME,A1
        MOVE        #51,D0
        TRAP        #15
 
        ; Speichere File-ID
        ; Speichern der File-ID ist nötig,
        ; um das D1-Register wieder mit der File-ID
        ; zu füllen, da es sonst zu Fehlern kommt.
        ; Falls nämlich D1 einen anderen Wert hat als
        ; die File-ID, dann kann EASy68K 
        ; die Datei nicht lesen.
        MOVE.L      D1,FILE_ID
 
SCHLEIFE
        ; Setze den Lesecursor
        ; auf das nächste Zeichen, das
        ; gelesen werden soll.
        MOVE.L      #55,D0
        MOVE.L      FILE_POS,D2
        TRAP        #15
 
        ; Lese ein Zeichen
        LEA         BUFFER,A1
        MOVE.L      #1,D2
        MOVE.L      #53,D0
        TRAP        #15
 
        ; Prüfe, ob EOF erreicht worden ist
        CMP.L       #1,D0
        BEQ         ENDE
 
        ; Prüfe, ob ein Fehler aufgetreten ist
        CMP.L       #2,D0
        BEQ         FEHLER
 
        ; Gib das Zeichen aus, das gelesen worden ist
        ; in der Konsole aus
        MOVE.L      #0,D1
        MOVE.B      BUFFER,D1
        MOVE.L      #6,D0
        TRAP        #15
 
        ; Setze die File-ID wieder ein
        MOVE.L      FILE_ID,D1
 
        ; Erhöhe die Leseposition um eins
        ADD.L       #1,FILE_POS
 
        ; Springe zum Schleifen anfang
        BRA         SCHLEIFE
 
FEHLER
        ; Gib eine Fehlermeldung aus
        LEA         ERR_MESS,A1
        MOVE.L      #14,D0
        TRAP        #15
 
        ; Und springe zum Ende
        BRA         ENDE
 
ENDE
        ; Schliessen aller Dateien
        MOVE.L      #50,D0
        TRAP        #15
 
    SIMHALT             ; halt simulator
 
; Put variables and constants here
FILENAME        DC.B        'test2.txt',0
FILE_POS        DC.L        0
BUFFER          DC.B        0
ERR_MESS        DC.B        'Es ist ein Fehler aufgetreten',0
FILE_ID         DC.L        0
 
    END    START        ; last line of source

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.