mov al, fs:[di+3] | ; читаем состояние окна В |
mov winB, al | ; и сохраняем его в байте winB |
mov cl, es:[di+4] | ; читаем в cl window granularity |
mov ax, 64 | ; помещаем в ах число 64 |
div cl | ; деление ах = ax/cl |
mov GrUnit, ax | ; сохраняем результат деления |
mov eax, es:[di+OCh] | ; читаем в еах адрес подпрограммы |
mov VMC, eax | ; и сохраняем его в VMC |
Две первые команды примера 2.6 сохраняют в памяти содержимое байта состояния окна в. Эта величина нужна, если видеокарта поддерживает работу с двумя окнами. Она может принимать одно из четырех значений:
Далее в примере 2.6 команды 3—6 вычисляют единицу для приращения (увеличения или уменьшения) значений окон видеопамяти делением числа 64 на содержимое байта массива info со смещением 4. Такой способ вычисления GrUnit рекомендован стандартом VESA.
Две последние команды примера 2.6 сохраняют в области данных задачи адрес подпрограммы BIOS, выполняющей работу с видеоокнами. Адрес состоит из сегмента и смещения, поэтому при его пересылке в качестве посредника используется 32-разрядный регистр еах.
Имена GrUnit и VMC заимствованы из описания стандарта VESA, их расшифровка приводится в следующем разделе данной главы.
В байте массива info, имеющем смещение 6, хранится размер окна, выраженный в килобайтах. Его стандартным значением является код 40h, соответствующий 64 Кбайт. Для семейства IBM PC стандартным значением сегмента оперативной памяти является именно 64 Кбайт. Возможно, по этой причине автор не встречал видеокарт, имеющих окна аномального размера.
В данном разделе мы показали способ получения и сохранения только той информации о видеокарте, которая будет многократно использоваться в примерах, приведенных в книге. Об использовании других величин, содержащихся в массиве info, речь пойдет по мере изложения материала.
Советуем вам составить программу, которая позволяет ввести код видеорежима, прочитать в память массив info и вывести на экран или печать содержимое его первых 20 слов в шестнадцатеричном коде. Затраченные на ее составление и отладку усилия окупятся при дальнейшей работе.