Глава 2
Вверх
;создание файла
;копирование CMOS в файл
mov ah,40h
inc svalue
;вывод сообщения
popa
Анализ:
Для создания файла используется функция 3Ch DOS прерывания 21h.
;запись файла *****************************************************************
;ВХОДНЫЕ ПАРАМЕТРЫ
;svalue
;ax - имя файла
pusha
mov dx,ax
mov ah,3Ch
mov cx,00h
int 21h
mov handle,ax
jc error_file
mov svalue,00h
cycl1: call readSR
mov bx,handle
mov cx,1
mov dx,offset tek_el
int 21h
cmp svalue,40h
jne cycl1
call close_file
mov kolonka,0
mov stroka,47
call print_position
mov color,0Ah
mov bp,offset message6
mov cx,dlmessage6
call print_string
call press_key
call clear_string
mov svalue,dl
ret
save_file endp
;******************************************************************************
DOS Fn 3cH: Создать файл через описатель | ||
Вход | AH | 3cH |
DS:DX | адрес строки ASCIIZ с именем файла | |
CX | атрибут файла | |
Выход | AX | код ошибки если CF установлен
описатель файла если ошибки нет |
Описание:
;создание файла
mov dx,ax ;в dx имя файла
mov ah,3Ch ;создать файл
mov cx,00h ;атрибут
int 21h
mov handle,ax ;сохранить описатель handle
jc error_file
Продолжим рассмотрение процедуры save_file.
;копирование CMOS в файл
mov ah,40h
inc svalue
После того, как файл создан, в цикле будет произведена запись в него данных из памяти.
Для этого используется рассмотренная нами ранее процедура записи одной ячейки readSR, и функция DOS 40h. Для контроля того, сколько именно данных считано из памяти и записано в файл служит переменная svalue, значение которой после каждой итерации цикла инкременируется и сравнивается с 40h.
mov svalue,00h
cycl1: call readSR
mov bx,handle
mov cx,1
mov dx,offset tek_el
int 21h
cmp svalue,40h
jne cycl1
Для записи в файл используется функция 40h DOS прерывания 21h.
DOS Fn 40H: Писать в файл через описатель | ||
Вход | AH | 4bH |
BX | описатель файла | |
DS:DX | адрес буфера, содержащего записываемые данные | |
CX | число записываемых байт | |
Выход | AX | код ошибки если CF установлен |
AL | число реально считанных байт <===== лучший тест для ошибок |
Описание:
Используйте функцию 42H LSEEK, чтобы установить указатель файла,
если необходимо (OPEN сбрасывает указатель в 0).
Обновляет указатель чтения/записи файла, чтобы подготовиться
к последующим операциям последовательного чтения или записи.
Вы должны всегда сравнивать возвращаемое значение AX (число запи
санных байт)
с CX (запрошенное число байт для записи).
Удобно использовать эту функцию для вывода на умалчиваемые устройства,
такие как Стандартный Вывод, взамен использования различных
функций вывода текста.
Далее файл закрывается и
выводится сообщение о том, что данные из памяти скопированы в файл.
call close_file
;вывод сообщения
popa
mov kolonka,0
mov stroka,47
call print_position
mov color,0Ah
mov bp,offset message6
mov cx,dlmessage6
call print_string
call press_key
call clear_string
mov svalue,dl
ret
Назад |
Начало урока |
Вверх |
Вперед
Содержание