мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияПоследняя версияСледующая версия справа и слева | ||
asm:lesson6 [20/10/2010 21:15] – arabusov | asm:lesson6 [21/10/2010 16:07] – arabusov | ||
---|---|---|---|
Строка 293: | Строка 293: | ||
пример | пример | ||
слова MPY вместо обычного мнемокода MUL. | слова MPY вместо обычного мнемокода MUL. | ||
+ | |||
+ | ===== Работа с файлами в MS-DOS ===== | ||
+ | |||
+ | ==== Функции типа дескриптора ==== | ||
+ | |||
+ | В MS-DOS начиная со второй версии файловая система стала иерархической, | ||
+ | C: | ||
+ | Специфика MS-DOS такова, | ||
+ | | ||
+ | преобразуется в | ||
+ | 43 3a 5c 53 59 53 54 45 4d 5c 43 4f 4d 4d 41 4e 44 2e 43 4f 4d 00 | ||
+ | Для работы с файлом с помощью функции типа дескриптора, | ||
+ | jc error | ||
+ | где error - указатель на начало обработчика. | ||
+ | Теперь рассмотрим некоторые функции типа дескриптора, | ||
+ | === Создание файла === | ||
+ | По заданному в коде ASCIIZ пути создаёт новый файл на указанном или текущем диске или на указанном или текущем каталоге. Если указанный файл существует, | ||
+ | При вызове: | ||
+ | * AH = 3cH | ||
+ | * CX = атрибут (в нашем случае всегда 0) | ||
+ | * DS:DX - адрес строки, | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | * AX = дескриптор | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки | ||
+ | === Открытие файла === | ||
+ | По заданному в коде ASCIIZ пути открывает файл на указанном или текущем диске или на указанном или текущем каталоге. Возвращается дескриптор. | ||
+ | При вызове: | ||
+ | * AH = 3dH | ||
+ | * AL = режим доступа | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | * DS:DX - адрес строки, | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | * AX = дескриптор | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки | ||
+ | === Закрытие файла === | ||
+ | При вызове: | ||
+ | * AH = 3Eh | ||
+ | * BX = дескриптор | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки | ||
+ | === Чтение файла === | ||
+ | При вызове: | ||
+ | * AH = 3Fh | ||
+ | * BX = дескриптор | ||
+ | * CX = число байт для чтения | ||
+ | * DS:DX = адрес буфера | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | * AX = число переданных байтов (может быть меньше CX!) | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки | ||
+ | === Запись в файл === | ||
+ | При вызове: | ||
+ | * AH = 40h | ||
+ | * BX = дескриптор | ||
+ | * CX = число байт для вывода записи | ||
+ | * DS:DX = адрес буфера | ||
+ | При возврате: | ||
+ | Успешно - флаг переноса сброшен | ||
+ | * AX = число переданных байтов (может быть меньше CX!) | ||
+ | Неудачно - флаг переноса установлен | ||
+ | * AX = код ошибки |