Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_lectures.doc
Скачиваний:
27
Добавлен:
28.04.2019
Размер:
992.77 Кб
Скачать

Вывод на экран двоичного числа

MOV BX, 0A3C5H

MOV CX, 0008

CYCLE:

RCL BX, 1 ; циклический сдвиг BX на 1 разряд вправо

LOOP CYCLE ; пока СХ=СХ-10

INT 20H

MOV AH, 02 ; номер функции в AH – печать символа из DL

MOV CX, 0008 ; количество сдвигов

MET: MOV DL, 00

RCL BL, 1

ADC DL, 30

INT 21H

LOOP MET

INT 20H

Работа с дисковыми файлами

В DOS доступны следующие функции работы с файлами:

39hсоздать каталог файлов (аналогично функции MKDIR DOS)

перед использованием

DS:DX – адрес ASCIIZ – строки –имя пути для нового каталога.

Ошибки в АХ: 3 - путь не найден

5 – ошибка в доступе

hудалить каталог

DS:DX – адрес ASCIIZ – строки –имя пути для нового каталога.

Ошибки в АХ те же.

hсменить текущий каталог

DS:DX – то же

АХ – 3

hсоздать файл (CREATE)

открывает существующий или создает новый файл.

DS:DX – адрес ASCIIZ строки.

СХ – аттрибут файла

АХ – возвращается логический номер файла.

Логический номер файла или дескриптор – это 16-битовое число, используемое DOS как указатель на систему таблиц. Логический номер освобождается после закрытия файла и может быть использован повторно.

Существует пять стандартных логических номеров 0-4, которые автоматически предоставляются любой программе. Остальные номера с большими логическими номерами DOS предоставляет по требованию.

Логический номер

Использование

Устройство по умолчанию

0

Стандартный ввод (клавиатура)

CON:

1

Стандартный вывод (экран)

CON:

2

Стандартное устройство вывода при ошибке

CON:

3

Стандартное вспомогательное устройство

AUX:

4

Стандартное устройство печати

PRN:

АSCIIZ-строка

Функции DOS, работающие с файлами, требуют задания имени и пути к файлу в виде ASCIIZ строки. ASCIIZ строка состоит из обычных ASCII символов, за которыми следует нулевой байт. Типичная строка выглядит наподобие:

C:\DIRECTORY1\DIRECTORY2\FILENAME.EXT

В качестве разделителя может быть как прямая, так и обратная косая черта. (имя дисковода может быть опущено)

В СХ, а точнее, в СL – аттрибут файла

0 – отсутствие аттрибутов

1 – только чтение

2 – скрытый файл

4 – системный

8 – метка тома

16 = 10h – подкаталог

32 = 20h – архив – этот разряд сброшен для всех файлов, которые изменялись после последнего копирования.

После выполнения всех необходимых действий по созданию файла, функция h возвращает в регистре АХ дескриптор созданного файла, которым могли в дальнейшем пользоваться для записи в файл или чтения из него. Если файл с заданным именем уже существовал, функция h фактичеки уничтожит имеющийся файл и создаст новый с тем же именем.

Так как АХ используется для возврата как логического номера, так и кода ошибки, то в качестве признака ошибки необходимо использовать флаг CF (флаг переноса).

Возможны коды возврата:

3 – путь не найден

4 – нет свободного логического номера

5 – отказ в доступе – либо в каталоге нет места

Для новой записи, либо уже существующий файл защищен от записи и не может быть открыт для вывода данных.

Функция 3Dh - открыть файл (OPEN)

DS:DX – адрес строки, содержащей путь и имя файла

AL - код режима открытия

Рассмотрим только разряды 02.

2

1

0

000

001

010

Только чтение

Только запись

Чтение/запись

Бит 7 – бит наследования

Биты 4-6 – режимы совместного использования.

Коды возврата в АХ:

2 – файл не найден

3 – путь не найден

4 – нет свободного логического номера файла

5 – отказ в доступе

12 – недопустимый код доступа

3Eh – закрытие файла

Логический номер в ВХ.

Код ошибки 6 – ошибочный логический номер.

3Fh – читать данные изфайла или устройства

Логический номер - ВХ.

Число байт – СХ

Адрес буфера – DS:DX

В АХ возвращается число действительно считанных байтов. Если в АХ 0, то программа пыталась считать данные за концом файла.

Код ошибки:

5 – отказ в доступе

6 – ошибочный логический номер.

40h – вывести данные в файл или на устройство (WRITE)

Логический номер - ВХ.

Число байт – СХ

Адрес выводимых данных – DS:DX

В АХ возвращается число действительно выведенных байтов.

Проверка состоит их 2х шагов

  1. СF

  2. AX = ? CX. Если АХ<СХ – на диске не хватило места.

41h – удалить файл.

DS:DX – адрес строки, определяющей имя файла.

Заполнители ? и * в имени файла использовать нельзя.

42h – переместить указатель текущей позиции в файле.

Логический номер – ВХ.

Новое положение указателя задается путем загрузки в регистр AL исходного положения указателя, а в пару регистров СХ:DX – число байтов, на которое необходимо переместить указатель. Загружаемое в пару регистров СХ:DX смещение в байтах – это 32-битовое число без знака. В СХ – старшая часть, в DX – младшая. Если смещение меньше 65535, то СХ = 0. Исходное положение в АL задается с помощью так называемого кода метода:

АL = 0 – смещение берется от начала файла и указатель изменяется на СХ:DX от этой точки

АL = 1 – смещение берется от текущей позиции

АL = 2 – смещение берется от конца файла.

В последнем случае в паре регистров СХ:DX обычно ноль, чтобы определить текущий размер файла. Если задать смещение 0 и запросить метод 0 – то возврат в начало файла.

Коды ошибок:

1 – ошибочный номер функции

6 – ошибочный логический номер

Пример

; создание файла

MOV AH, 3Ch ; Функция CREATE

MOV CX, 0 ; Без аттрибутов

MOV DX, OFFSET Filename ; Адрес имени Файла

INT 21h ; ВЫзов DOS

Jc error1 ; ошибка

Mov Handler, AX ; сохраним дескриптор

; запись строки в файл

MOV AH, 40h ; Функция записи

MOV BX, Handler ; Дескриптор

MOV CX, BufLen ; Число записываемых байтов

MOV DX, OFFSET Buf ; Адрес буфера

INT 21h

Jc error2

; закрытие файла

MOV AH, 3Eh ;

MOV BX, Handler

INT 21h

Jc error3

; завершение программы

MOV AX, 4C00h ; Функция завершения

INT 21h

error1: …

error2: …

error3: …

; данные

Buf DB ‘0123456789’ ; Данные, записываемые в файл

BufLen EQU $ - Buf ; Длина данных. $ - текущее значение счетчика

Handler DW ? ; Ячейка для дескриптора

Filename DB ‘D:\test\myfile.001’,0 ; ASCIIZ строка спецификации файла

В простых программах файлы можно не закрывать, так как функция завершения 4Ch закрывает все открытые файлы программы.

Рассмотрим пример программы с имеющимся файлом:

; Открыть файл

MOV AH, 3Dh ; функция OPEN

MOV AL, 2 ; Доступ для чтения/записи

MOV DX, OFFSET Filename ; Адрес имени файла

INT 21h

Jc error1

MOV Handler, AX ; Сохранение дескриптора

; Пытаемся прочитать 65535 байт

MOV AH, 3Fh ; Функция READ

MOV BX, Handler ; Дескриптор

MOV CX, 65535 ; Сколько читать

MOV DX, OFFSET BufIn ; Сюда читать

INT 21h

Jc error2

MOV CX, AX ; сколько реально прочитано

; Вывод прочитанного на экран

MOV AH, 40h ; функция WRITE

MOV BX, 1 ; Дескриптор стандартного вывода

MOV DX, OFFSET BufIn ; отсюда выводить (СХ байт)

Int 21h

; завершение программы

MOV AX, 4C00h ; Функция завершения

INT 21h

error1: …

error2: …

error3: …

; Данные

BufIn DB 256 dup (‘ ‘) ; буфер ввода

Handler DW ?

Filename DB ‘D:\test\myf.001’,0 ; спецификация файла

В данном случае на экран.

Удобнее вывести с помощью 40h, так как мы не занем длину выводимого сообщения, то есть не знаем, куда поставить ‘$’ для функции 9h.

Анализ системных ошибок

MOV AH, Function ; Номер функции

; Заполнение регистров параметрами, необходимыми для

; выполнения данной функции

INT 21h

JC Error ; флаг СF установлен

; Нет, нормальное продолжение программы

…………..

Error: ….

; Да, анализ ошибок в АХ

CMP AX, 1

JE Error1

CMP AX, 2

JE Error2

…..

43h – получить, установить аттрибуты файла

56h – переименовать файл

57h – получить/установить дату и время последнего изменения файла

в DOS 3.00

5Ah – создать временный файл

CX - аттрибут

DS:DX – имя пути, должно заканчиваться ‘\

Строка должна иметь длину на 12 байт больше длины имени пути, чтобы DOS могла бы дополнить уникальным именем файла.

5Bh – создать новый файл

В отличие от h, если файл уже существует, то 5Bh сообщает об ошибке.

h – блокировать/разблокировать доступ к файлу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]