Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...