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, показан способ сохранения этих величин и вычисления единицы приращения значения окна.