MOV CX, 01H ; атрибута «только для чтения»
MOV CX, 01H ; атрибута «только для чтения» MOV DX, OFFSET FileName ; ASCIIZ-строка INT 21H
При использовании функции 43H атрибут «нормальный» означает отсутствие всех атрибутов файла. С помощью функции нельзя изменением атрибута из файла получить директорию и наоборот. В случае ошибки в регистре AX устанавливается код 02H, 03H или 05H.
Функция 56H Назначение: переименование существующего файла. Регистровая пара DS: DX должна содержать адрес ASCIIZ-строки с именем переименовываемого файла, а регистровая пара ES: DI – адрес ASCIIZ-строки с новым значением имени файла. Буквы дисков в обеих ASCIIZ-строках должны быть одинаковыми, а пути могут различаться. Таким образом, функция 56H позволяет не только переименовывать файл, но и переносить его из одного каталога в другой. Пример использования функции 56H: FileName1 DB ‘c: \docs\my. txt’, 0; старое имя файла FileName2 DB ‘c: \temp\old. txt’, 0; новое имя файла . . . MOV AH, 56H MOV AX, SEG FileName1 MOV DS, AX ; настройка DS MOV ES, AX ; настройка ES MOV DX, OFFSET FileName1 ; ASCIIZ-строка MOV DI, OFFSET FileName2 ; ASCIIZ-строка INT 21H В случае ошибки в регистре AX устанавливается код 03H (путь не найден), 05H (доступ запрещен) или 17H (разные дисководы).
9. 2 Примеры программ для работы с файлами Следующий пример демонстрирует программу, которая создает в текущем каталоге файл ENV. TXT и записывает в него свое окружение (переменные окружения и их значения), при этом строки разделяются символами перевода строки (в блоке переменных окружения программы строки разделяются нулями). CODE SEGMENT
ASSUME CS: CODE, DS: CODE; CS и DS указывают на сегмент CODE ORG 100H ; COM программа Start: MOV AH, 3CH ; функция создания файла MOV CX, 0 ; с нормальным атрибутом MOV DX, OFFSET FileName; ASCIIZ-строка INT 21H ; вызов DOS JC Error ; переход по ошибке MOV BX, AX ; сохранение файлоаого номера в BX MOV AX, DS: 2CH ; настройка DS MOV DS, AX ; на сегмент окружения программы XOR SI, SI ; обнуление SI M2: MOV DX, SI ; запоминание начала строки в DX M1: LODSB ; поиск нуля (конца строки) CMP AL, 0 JNZ M1 CMP BYTE PTR [SI], 0 ; если это последняя строка, JZ Exit ; то выход из программы MOV CX, SI ; вычисление длины строки SUB CX, DX DEC CX MOV AH, 40H ; функция записи в файл INT 21H ; вызов DOS JC Error ; переход по ошибке MOV CX, 2 ; запись 2-х байт PUSH DS ; сохранение DS PUSH CS ; настройка DS POP DS ; на сегмент команд (данных) MOV DX, OFFSET CrLf ; смещение области для записи MOV AH, 40H ; функция записи в файл INT 21H ; вызов DOS POP DS ; восстановление DS JC Error ; переход по ошибке JMP M2 ; повтор цикла записи строки в файл Exit: MOV AH, 3EH ; функция закрытия файла INT 21H ; вызов DOS Error: RET ; выход из программы FileName DB 'ENV. TXT', 0; имя создаваемого файла CrLf DB 0Dh, 0Ah ; символы перевода строки CODE ENDS END Start ; определение точки входа
Следующий пример демонстрирует программу, выводящую на экран содержимое текстового файла, имя которого указывается в командной строке. BUF_SIZE EQU 512 ; размер буфера для чтения
CODE SEGMENT ASSUME CS: CODE, DS: CODE; CS и DS указывают ; на сегмент CODE ORG 100H ; COM программа Start: MOV SI, 80H ; в SI – смещение ; командной строки LODSB ; загрузка в AL длины строки CMP AL, 0 ; если строка нулевой длины, JZ Exit ; то выход из программы M1: LODSB ; пропуск пробелов CMP AL, ' ' ; в начале JE M1 ; строки MOV DX, SI ; настройка DX на DEC DX ; начало имени файла M2: LODSB ; поиск признака CMP AL, 0DH ; конца JNE M2 ; строки MOV BYTE PTR [SI - 1], 0; создание ASCIIZ-строки MOV AH, 3DH ; функция открытия файла MOV AL, 0 ; код доступа – только чтение INT 21H ; вызов DOS JC Error ; переход по ошибке MOV BX, AX ; сохранение файлового номера в BX MOV CX, BUF_SIZE; запись в CX размера буфера ; для чтения M3: MOV AH, 3FH ; функция чтения из файла MOV DX, OFFSET Buf ; смещение буфера для чтения INT 21H ; вызов DOS JC Error ; переход по ошибке MOV SI, AX ; сохранение числа прочитанных байт MOV BYTE PTR [SI + Buf], '$' ; создание строки для ; функции 09H MOV AH, 09H ; функция вывода строки на экран INT 21H ; вызов DOS CMP SI, BUF_SIZE ; если прочитано 512 байт, JE M3 ; то это еще не конец файла Exit: MOV AH, 3EH ; функция закрытия файла INT 21H ; вызов DOS Error: RET ; выход из программы Buf DB BUF_SIZE+1 DUP (? ) ; буфер для чтения
CODE ENDS END Start ; точка входа
9. 3 Функции DOS для работы с каталогами Функции для работы с каталогами выполняют такие операции, как создание и удаление каталогов, а также получение и установка текущего каталога.
Функция 39H Назначение: создание каталога. Действие функции аналогично команде DOS «MKDIR». Для выполнения функции в регистровую пару DS: DX необходимо занести адрес ASCIIZ-строки с именем создаваемого каталога. ASCIIZ-строка может включать существующий путь. Функцией 39H можно создать каталог только в уже существующем каталоге, т. е. эта функция не может создать сразу дерево несуществующих каталогов. ASCIIZ-строка для функции 39H может иметь максимум 64 символа (не включая признак конца строки). Если в пути не указана буква диска, то каталог создается на текущем диске. То же относится и к пути каталога. Пример использования функции 39H: DirName DB ‘c: \games’, 0 ; имя создаваемого каталога . . . MOV AH, 39H MOV DX, OFFSET DirName ; ASCIIZ-строка INT 21H
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|