Kristoffer Eriksson
<5357>
· Text 972 · w8 · kommentar
1987-10-11 22:55
Ärende: Öppna fil i assembler
Den här frågan tycker jag hör bättre hemma i antingen ABC80- eller
800-mötet (eller MSDOS?) där du kan få hjälp av experter på de
maskin det gäller. Frågan rör ju operativsystemet mer än själva
processorn.
I varje fall glömde du tala om vilken maskin det gäller. Jag kan
berätta hur man kan göra i ABC800.
Eftersom du redan när programet skrivs vet både filnamn och drive,
och att det är en fil på disk, och du inte ska använda Basicens
I/O-funktioner, är det lika bra att gå direkt på DOS:ets rutiner.
Sålunda placerar man drive-numret i register C, dosbuffertens
nummer multiplicerat med 16 i B, adresse till filens namn (11
tecken utan punkt) i DE och anropar OPEN i DOS:et (24600). Sen
avläser man filens första sektor (RIB, den som håller reda på
filens övriga sektorerna) på adress 64776 (två bytes). Till sist
stänger man filen genom att anropa CLOSE (24609). B har kvar värdet
från förra anropet så den behöver man inte ladda om.
Visar det sig att filen inte finns kommer man att få sann carry
vid retur från OPEN. Uppstår något annat fel, görs hopp till den
DOS-felhaneringsvektor som gäller för det felet. Denna bör du i
förväg ha ställt till att peka på din egen felhanteringsrutin som
återställer SP och t ex anropar basicens felhantering.
Sen tillåter jag mig att betvivla att du klarar av att hitta de
andra sektorena i filen, även om det med stor möda är möjligt.