Fájlkezelés


A fájlkezelés típus nélküli, a fájlműveletek a DOS funkciók meghívásával hajthatók végre.

 

A lehetséges műveletek:

Þ    Fájl megnyitása

Þ    Fájlból olvasás

Þ    Fájl lezárása

Þ    Fájl létrehozása

Þ    Fájlba írás

Þ    Fájlban pozícionálás

 

Példa fájlbetöltésre:

 

 

ORG 100H

        MOV     AH,3DH          ; fajl megnyitasa

        MOV     AL,0            ; a nyitas modja: 0 => olvasasra nyitas

        MOV     DX,FajlNev      ; melyik fajl kell megnyitni

        INT     21H             ; a DOS megprobalja megnyitni a fajlt

        JNC     FajlOke         ; ha sikerult, akkor ugras tovabb

 

        MOV     AH,9            ; sztring kiiras DOS funkcioval

        MOV     DX,Hiba1        ; a hiba uzenet cimkeje

        INT     21H             ; megjelenik a hibauzenet

        MOV     AX,4C01H        ; kilepes 1-es hibakoddal

        INT     21H

 

FajlOke:

        MOV     BX,AX           ; a fajlt azonosito fajlszam attoltese BX-be

 

        MOV     AH,3FH          ; a DOS betoltes funkcioja

        MOV     DX,Puffer       ; a memoriacim, ahova tolteni fogunk

        MOV     CX,32768        ; a toltendo bajtok szama, ennel rovidebb

        INT     21H             ; fajlok teljesen be fognak toltodni

 

        MOV     AH,3EH          ; fajl lezarasa

        INT     21H

 

        MOV     AX,4C00H        ; normal kilepes

        INT     21H

 

FajlNev DB      'C.BAT',0       ; akar teljes fajlspecifikacio, amit 0 zar le

Hiba1   DB      'Nincs ilyen fajl',10,13,'$'    ; DOS sztring $ jellel zarul!

Puffer  RESB    32768           ; 32768 bajt lefoglalasa


A program lefutása után a program visszaadja a vezérlést, illetve, ha nem létezik a megfelelő állomány (C.BAT), akkor hibaüzenetet kapunk.

 

Ha nem akarjuk a puffert a COM fájlban lefoglalni, akkor a puffer elé írjuk be:

 

section .bss

 

Ennek a szekciónak a fordító csak a címkéit számítja ki, fizikailag nem kerül bele a fájlba a kód.

 

A betöltött fájl megjelenítése a képernyőn:

 

ORG 100H

        MOV     AH,3DH          ; fajl megnyitasa

        MOV     AL,0            ; a nyitas modja: 0 => olvasasra nyitas

        MOV     DX,FajlNev      ; melyik fajl kell megnyitni

        INT     21H             ; a DOS megprobalja megnyitni a fajlt

        JNC     FajlOke         ; ha sikerult, akkor ugras tovabb

 

        MOV     AH,9            ; sztring kiiras DOS funkcioval

        MOV     DX,Hiba1        ; a hiba uzenet cimkeje

        INT     21H             ; megejelenik a hibauzenet

        MOV     AX,4C01H        ; kilepes 1-es hibakoddal

        INT     21H

 

FajlOke:

        MOV     BX,AX           ; a fajlt azonosito fajlszam attoltese BX-be

 

        MOV     AH,3FH          ; a DOS betoltes funkcioja

        MOV     DX,Puffer       ; a memoriacim, ahova tolteni fogunk

        MOV     CX,32768        ; a toltendo bajtok szama, ennel rovidebb

        INT     21H             ; fajlok teljesen be fognak toltodni

 

        PUSH    AX              ; elmentjük a betöltött byte-ok számát

 

        MOV     AH,3EH          ; fajl lezarasa

        INT     21H

 

        POP     CX              ; a cklusszámlálóba a byte-ok száma kerül

        MOV     SI,Puffer       ; SI az aktuális karakterre mutat

Kiir_ciklus:

        PUSH    CX

        MOV     AH,2            ; DOS karakter-kiiró funkció lesz

        MOV     DL,[SI]         ; a kiirandó karakter

        INC     SI              ; következő karakter

        INT     21H             ; karakterkiiras híváas

        POP     CX

        LOOP Kiir_ciklus

 

 

        MOV     AX,4C00H        ; normal kilepes

        INT     21H

 

FajlNev DB      'C:\VECA\ASM\ASM\EXAMPLES\VECA3.ASM ',0       ; akar teljes fajlspecifikacio, amit 0 zar le

Hiba1   DB      'Nincs ilyen fajl',10,13,'$'    ; DOS sztring $ jellel zarul!

 

section .bss

Puffer  RESB    32768           ; 32768 bajt lefoglalasa

 

Feladat

Írjunk egy olyan másoló programot, ami átmásol egy adott fájlt egy adott néven!