- •4) Mov esi,6*2 ; 2 байта – размер элементов
- •Индексная адресация со смещением — режим адресации, при котором полный адрес формируется из двух компонентов:
- •Базовая индексная адресация со смещением — режим адресации, при котором полный адрес формируется максимум из трех компонентов:
- •Xor ecx,ecx ;обнуление есx
- •Структуры
- •Организовать обращение к элементам структуры.
- •Цепочечные команды или команды обработки строк символов
- •Организация обращения к элементам записи.
- •Работа с записями
- •1) Для выделения элемента записи необходимо:
- •2) Чтобы поместить измененный элемент на его место в запись необходимо:
- •3. В конце работы файл следует закрыть.
- •4. Признаком ошибки при выполнении функции dos является взведенный флаг с (переноса).
- •2. Создание файла с усечением существующего до нулевой длины.
- •LpFileName — указатель на asciiz-строку с именем (путем) открываемого или создаваемого файла;
- •DwDesiredAccess — тип доступа к файлу:
- •3) Создать и открыть новый файл
- •4) Чтение из файла или устройства
- •5) Переместить указатель чтения/записи
- •1) HFile – хэндл того файла, в котором перемещается указатель.
- •7) Запись в файл или устройство
- •8) Закрыть файл
- •9) Удаление файла
- •Функция 01h – ожидание ввода символа с эхопечатью
- •Функция 0ah – получение строки символов
- •1) Создать каталог
- •2) Удалить каталог
- •5) Определить текущий каталог
- •Перечень функций прерывания 21h, работающих с файлами, которые имеют длинные имена и соответствующие функции api Win32.
- •Перечислим функции api Win32, имеющие отношение к работе с файловой системой.
- •1) В Win32 получить время создания, время последнего доступа и время последней модификации файла можно с помощью функции GetFileTime.
- •3) В Win32 имеется функция GetFileInformationByHandle, с помощью которой можно получить все атрибуты файла:
- •Обзор прерываний bios
- •Int 10h, функция 0Dh. Чтение пиксела.
- •02H/03h - Чтение/запись секторов.
- •Прямое программирование видеобуфера в текстовом режиме
- •Текстовый режим. Доступ к памяти
- •Организация памяти в графическом режиме 12h
- •Вычисление адреса Пикселя по экранным координатам.
- •Рисование с помощью регистров Графического Контроллера
- •Установка цвета отдельных пикселей.
- •Прокрутка областей экрана, копирование областей экрана.
- •Чтение отдельных пикселей с экрана.
- •Рисование с помощью регистров Указателя Последовательности
- •Установка цвета ячейки пикселей.
8) Закрыть файл
Функция DOS 3Eh — Закрыть файл
Ввод:
АН = 3Eh
ВХ = идентификатор
Вывод:
CF = 0, если не произошла ошибка
CF = 1 и АХ = 6, если неправильный идентификатор
Если файл был открыт для записи, все файловые буфера сбрасываются на диск, устанавливается время модификации файла и записывается его новая длина.
9) Удаление файла
Функция DOS 41h — Удаление файла
Ввод:
АН = 41h
DS:DX = адрес ASCIZ-строки с полным именем файла
Вывод:
CF = 0, если файл удален
CF = 1 и АН = 02h, если файл не найден, 03h — если путь не найден, 05h — если доступ запрещен
Удалить файл можно только после того, как он будет закрыт, так как DOS будет продолжать выполнять запись в несуществующий файл, что может привести к разрушению файловой системы. Функция 41h не позволяет использовать маски (символы * и ? в имени файла) для удаления сразу нескольких файлов, хотя этого можно добиться, вызывая ее через недокументированную функцию 5D00h.
Основные функции для ввода символов с клавиатуры
Функции 7 и 8 прерывания 21H ожидают ввода символа, если буфер клавиатуры пуст; появление символа на экране не отображается.
Разница между этими функциями в том, что функция 8 распознаёт специальное сочетание клавиш "Ctrl+Break" (при активизации Ctrl+Break выполняется прерывание INT 23h – останов программы), а функция 7 игнорирует это сочетание клавиш.
Функции 7 и 8 возвращают введённый символ в регистр AL. Если AL содержит ASCII 0, то получен расширенный код. При этом необходимо повторить вызов прерывания с теми же параметрами, и в AL появится второй байт расширенного кода.
Расширенные клавишы ASCII (F1-F12, PageUp и т.п.)
Вход: |
АН |
07h |
Выход: |
AL |
код символа |
Вход: |
АН |
08h |
Выход: |
AL |
код символа |
Пример 1.
;--- получаем введённый символ
MOV AH,8 ; номер функции
INT 21H
CMP AL,0 ; проверяем на расширенный код
JE EXT_COD ; если да, то переход на анализ кода иначе –
; обработка символа анализ расширенного кода
EXT_COD:
INT 21H ; берём второй байт кода
CMP AL, 75 ; проверяем на "стрелка влево"
JE CUR_LEFT ; переход к обработчику
CMP AL, 77 ; проверяем на "стрелка вправо"
JE CUR_RIGHT ; переход к обработчику
Функция 01h – ожидание ввода символа с эхопечатью
Вход: |
АН |
01h |
Выход: |
AL |
символ, полученный из STDIN |
Функция 1 прерывания 21H ожидает ввода символа с клавиатуры, если её буфер пуст, а затем выводит его на экран в текущую позицию курсора.
Функция обрабатывает нажатие "Ctrl+Break". Введённый символ сохраняется в регистре AL. Если содержимое AL равно ASCII 0, то для получения расширенного кода необходимо повторить прерывание.
Функция 02h – вывод символа на STDOUT с проверкой на Ctrl+Break
Вход: |
АН |
02h |
DL |
символ, выводимый на устройство стандартного вывода |
|
Выход: |
Нет |
--- |
Эта функция посылает символ из регистра DL на устройство стандартного вывода.
В DL можно записать как ASCII-код символа, так сам символ. В последнем случае символ заключается в одинарные кавычки. Если при выполнении этой функции была нажата комбинация клавиш Ctrl+Break, то выполняется прерывание INT 23h, которое по умолчанию осуществляет выход из программы.
Данная функция обрабатывает некоторые управляющие символы:
Выводимый символ |
Действие |
BEL (07h) |
появляется звуковой сигнал |
BS (08h) |
курсор перемещается на одну позицию влево |
НТ (09h) |
используется для замены на несколько пробелов |
LF (0Ah) |
перевод курсора на одну позицию вниз |
CR (0Dh) |
переход на начало текущей строки |