- •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
- •Вычисление адреса Пикселя по экранным координатам.
- •Рисование с помощью регистров Графического Контроллера
- •Установка цвета отдельных пикселей.
- •Прокрутка областей экрана, копирование областей экрана.
- •Чтение отдельных пикселей с экрана.
- •Рисование с помощью регистров Указателя Последовательности
- •Установка цвета ячейки пикселей.
Текстовый режим. Доступ к памяти
В текстовом режиме 03h видеоадаптер для вывода символов использует буфер в памяти, располагающийся по постоянному адресу 0B8000h (SEG: 0B800h, OFT: 0h). Каждая логическая ячейка этого буфера состоит из двух байт:
0 - ASCII-код символа
1 - Атрибут цветности
Ячейки располагаются непосредственно друг за другом построчно и постранично. (Видеоадаптеры с размером памяти >=256К поддерживают 8 экранных страниц из которых в некоторый момент времени может быть отображена только одна)
Это означает, что символ с экранными координатами 1*1 страницы 0 будет иметь адрес 0B8000h, символ с координатами 80*25 - 0B8000h + 80 * 25 * 2 - 2, символ с координатами 0*0 страницы 1 - 0B8000h + 80 * 25 * 2.
Отсюда выводится несколько простых и удобных функций записи символов на любую экранную страницу и чтения символов с любой экранной страницы независимо от позиции курсора и активной страницы:
Вычисление физического смещения символа по заданным координатам
; На входе: al - Горизонтальная координата X (отсчет от 1)
; ah - Вертикальная координата Y (отсчет от 1)
; cl - Номер страницы (отсчет от 0)
; На выходе: di - смещение символа по заданным координатам
CharAddr PROC
; Вычисляем смещение для позиции символа
mov CH, AH
mul CH ; Перемножаем координаты X, Y
shl AX, 1 ; Умножаем результат на 2
sub AX, 2 ; Устанавливаем смещение на начало ячейки
; Вычисляем смещение страницы
mov DI, AX ; Сохраняем смещение символа в DI
push DX ; Сохраняем содержимое DX
mov AX, 4000 ; Помещаем в AX размер страницы с байтах
xor CH, CH
mul CX ; Вычисляем смещение страницы
pop DX ; Восстанавливаем содержимое DX
; Вычисляем полное смещение
add DI, AX
ret
CharAddr ENDP
* Функция не проверяет переполнение AX при выполнении mul CX, полагая, что смещение позиции символа для диапазона страниц 0..7 не может превышать размера WORD
Запись символа по заданным координатам
; На входе: al - Горизонтальная координата (отсчет от 1)
; ah - Вертикальная координата (отсчет от 1)
; dl - ASCII-код символа
; dh - Атрибут цветности
; cl - Номер страницы (отсчет от 0)
WriteChar PROC
push ESpush DI
; Помещаем в ES сегмент видеобуфера
push 0B800h
pop ES
; Вычисляем полное смещение символа
call CharAddr
; Выводим символ на экранную страницу
mov ES:[DI], DX
pop DI
pop ES
ret
WriteChar ENDP
Чтение символа по заданным координатам
; На входе: al - Горизонтальная координата X (отсчет от 1)
; ah - Вертикальная координата Y (отсчет от 1)
; cl - Номер страницы (отсчет от 0)
; На выходе: al - ASCII-код символа
; ah - Атрибут цветности
ReadChar PROC
push ES
push DI
; Помещаем в ES сегмент видеобуфера
push 0B800h
pop ES
; Вычисляем полное смещение символа
Call CharAddr ; Читаем символ с экранную страницу
mov AX, ES:[DI]
pop DI
pop ES
ret
ReadChar ENDP
Страничная организация видеопамяти может быть использована для сохранения некоторой области экрана с последующим ее быстрым восстановлением. Подобные операции необходимы при выводе меню или всплывающих диалоговых окон, сообщений.