- •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
- •Вычисление адреса Пикселя по экранным координатам.
- •Рисование с помощью регистров Графического Контроллера
- •Установка цвета отдельных пикселей.
- •Прокрутка областей экрана, копирование областей экрана.
- •Чтение отдельных пикселей с экрана.
- •Рисование с помощью регистров Указателя Последовательности
- •Установка цвета ячейки пикселей.
Организация памяти в графическом режиме 12h
Видеопамять в этом режиме организована образом, отличным от текстового режима.
– Во-первых, начало видеобуфера находится по адресу 0A0000h.
– Во-вторых, память организована в виде битовых матриц.
В режиме 12h этих матриц четыре. Каждому пикселю экрана соответствует один бит каждой из битовых матриц. Таким образом каждой адресуемой ячейке видеопамяти - байту - соответствует восемь пикселей. Значение цвета пикселя получается как результат объединения значений соответствующего ему бита всех битовых матриц.
К сожалению, программа не может адресовать отдельные битовые матрицы непосредственно в памяти. Запись в видеобуфер - для корректного задания цвета как отдельных пикселей в байте, так и всей строки из 8 пикселей байта - должна сочетаться с регистровым программированием. Некоторые наиболее простые и полезные приемы рассмотрены ниже.
Вычисление адреса Пикселя по экранным координатам.
Нетрудно догадаться, что адрес отдельного пикселя состоит из двух значений: смещения байта относительно начала видеобуфера, в котором находится пиксель и индекса бита внутри этого байта. Для практического применения индекс бита должен быть представлен в виде операнда к командам SHL, SHR или маски к логическим командам and, or, xor, not. Так как это задача чисто математическая и не имеет отношения к тематике статьи позволю себе оставить ее решение на совести программиста, который возьмется за программирования регистровой графики :).
Рисование с помощью регистров Графического Контроллера
Запись видеопамяти с использованием регистров Графического Контроллера позволяет выполнять большинство операций рисования и вывода символов на экран.
Регистры Графического Контроллера доступны только косвенно через порты 3CEh, 3CFh (Другие регистра Графического Контроллера 3CAh и 3CCh не представляют интереса для прикладного программиста) . Для выбора требуемого регистра следует запись его индекс в регистр Адрес Графики 1 и 2, порт 3CEh. Для быстроты установки требуемого регистра Графического контроллера может быть использован словный вариант команды OUT - out DX, AX, при этом DX должен содержать 3CEh, AL - индекс требуемого регистра, а AH - значение, записываемое в регистр.
Установка цвета отдельных пикселей.
Пример основан на комбинированном использовании регистров Режим (индекс 5) и Битовая Маска (индекс 8). Выбирается режим записи 2 регистра Режим. В этом режиме записанный в видеопамять байт будет интерпретироваться как значение цвета пикселей, разрешенных в регистре Битовая Маска. Пиксели, запрещенные в регистре Битовая Маска не изменяются. Чтобы разрешить пиксель для изменения достаточно установить соответствующий ему бит регистра Битовой Маски в 1.
; На входе: ah - битовая маска устанавливаемых пикселей
; al - значение цвета
; * Для простоты записывается первая 8-ми пиксельная ячейка видеопамяти.
SetPixels PROC
push ES
push DI
push 0A000h
pop ES
xor DI, DI
mov DX, 3CEh
push AX
mov AX, 0205h
out DX, AX ; Выбор регистра Режим и одновременная установка режима 2
mov AX, [SP]
mov AL, 8
out DX, AX ; Выбор регистра Битовая Маска и одновременная запись маски разрешенных икселей.
pop AX
mov AH, ES:[DI] ; *
mov ES:[DI], AL
pop DI
pop ES
ret
SetPixels ENDP
* Команда mov AH, ES:[DI] служит для сохранения текущего цвета запрещенных, неизменяемых пикселей и связана с функционированием видеоадаптера: Значение цвета всех пикселей ячейки в распределении по битовым матрицам не может быть считано из памяти непосредственно. При чтении центральным процессором видеопамяти 4 байта из всех матриц автоматически помещаются процессором адаптера в так называемые регистры-защелки. При записи видеопамяти данные, передаваемые центральным процессором комбинируются со значениями этих регистров-защелок по правилам, определяемым установками регистров Графического Контроллера. таким образом, если перед записью по некоторому адресу видеопамяти не выполнить чтение по этому же адресу, то неизменяемые пиксели примут цвет пикселей последней считанной кем-либо 8-ми пиксельной ячейки.
Приведенный выше пример удобен для выполнения одноцветной заливки областей экрана, рисования линий, вывода символов с прозрачным фоном.
Другой регистр Графического Контроллера - регистр Циклический Сдвиг Данных (индекс 3) позволяется, например выводить символы в курсивном начертании, а также использовать при выводе логические операции над текущими экранными цветами и записываемым цветом. Значения битов при установке этого регистра следующие:
0..2 - Количество позиций циклического сдвига вправо
3..4 - Логические операции
00b - Запись данных без изменения
01b – And
10b – Or
11b - Xor
5..7 - Не используются