Для работы с файловым номером путь доступа и имя файла задаются символьной строкой, которая заканчивается нулем, например
nampath db ‘A:fn.asm’,0
nampath2 db ‘c:temptasmfn.dat’,0
такая строка называется ASCIIZ – строкой.
Функции создания нового и открытия старого файлов присваивают каждому файлу номер, и затем чтение и запись осуществляются с помощью полученного номера.
Создание файла. Новый файл создается с помощью функции 3Ch прерывания 21h. Регистр dx должен содержать адрес ASCIIZ – строки, содержащей путь и имя файла. В регистре cx должен быть записан атрибут файла. (Атрибут участвует в записи информации о файле в корневом каталоге, см. п. 8.1.) Файловый номер состоит из одного слова. Например:
mov ah,3Ch
mov cx,0 ;обычный файл
lea dx,nampath ;путь и имя
int 21h
jc error ;если ошибка
mov handle,ax ;файловый номер
Здесь файловый номер описывается как
handle dw ?
В случае возникновения ошибки флаг CF=1.
Запись файла. Файл записывается с помощью функции 40h. В регистре BX должен быть установлен файловый номер, в CX – число записываемых байтов, в DX – адрес области, откуда будут считываться данные, записываемые в файл. Например, если этот буфер называется OUTREC и содержит 256 байт, то для его записи достаточно выполнить команды:
mov ah,40h ;функция записи
mov bx,handle ;файловый номер
mov cx,256 ;256 байт
lea dx,outrec ;адрес области вывода
int 21h
jc error2 ;если ошибка
cmp ax,256 ;все байты записаны?
jne error3
Если диск переполнен, то записываются не все байты. Возникает ошибка.
Закрытие файла. Для закрытия файла файловый номер записывается в BX и вызывается функция 3Eh:
mov ah,3Eh
mov bx,handle
int 21h
В случае ошибки в регистре AX возвращается 06 (неправильный файловый номер).
Открытие файла. Существующий файл открывается с помощью функции 3Dh прерывания 21h. При этом регистр DX должен содержать ASCIIZ – строку с путем доступа и именем файла, а регистр AL – код доступа:
0 – открыть на чтение
1 – открыть на запись
2 – открыть на чтение и запись.
В регистре AX возвращается файловый номер. Например:
mov ah,3Dh
mov al,0 ;только чтение
lea dx,nampath
int 21h
jc error ;если ошибка
mov handle,ax ;файловый номер
Чтение файла. Открытый на чтение файл читается с помощью функции DOS 3Fh. При этом необходимо установить в регистре BX файловый номер, в CX – число байтов и в DX – адрес области ввода. Например, в случае определения данных
handle dw ?
buffer db 512 dup(‘ ‘)
и файла, открытого выше, для чтения данных достаточно выполнить команды:
mov ah,3Fh ;функция чтения
mov bx,handle ;файловый номер
mov cx,512 ;длина записи
lea dx,buffer ;буфер для чтения
int 21h
jc error ;если ошибка
cmp ax,0 ;в ax — число
je endfile ;прочитанных байтов