Графические устройства

         

Определение значений трех переменных



Пример 2.5. Определение значений трех переменных



succ: mov ax, fs:[di+08] ; читаем значение видеосегмента
mov Vbuff, ax ; и сохраняем его в Vbuff
mov ax, fs:[di+12h] ; читаем количество точек в строке
mov horsize, ax ; и сохраняем его в horsize
mov ax, fs:[di+14h] ; читаем количество строк на экране
mov versize, ax ; и сохраняем его в versize

Команда пересылки не может перемешать данные из одного места памяти в другое, в подобных случаях нужны две команды и регистр, используемый в качестве посредника. В примере 2.5 посредником является регистр ах, но можно применять любой из регистров общего назначения. При чтении в регистр ах использован индексный способ адресации второго операнда с указанием смещения в виде числа. Макроассемблер включает смещение в код формируемой команды. Конкретное значение адреса операнда вычисляет микропроцессор при выполнении команды. Для этого он суммирует текущее содержимое регистра di и указанное в коде команды смещение.

Напомним, что в слове массива info со смещением 10h находится размер отображаемой на экране строки (scan Line) в байтах. Если эта величина будет использоваться в задаче, то ее также надо сохранить. В примере 2.11 для этого выделена переменная Bperiine.

Переменные для работы с окнами. Массив info содержит три величины, значения которых используются при работе с окнами видеопамяти. В примере 2.6, который является продолжением примера 2.5, показан способ сохранения этих величин и вычисления единицы приращения значения окна.



Содержание раздела