Иллюстрированный самоучитель по SVGA

Часто используемые в примерах имена

В примерах, приводимых в данной и последующих главах книги, многократно повторяются имена переменных, подпрограмм для работы с окнами видеопамяти и макроопределений, предназначенных для записи в стек или выталкивания из него содержимого регистров. Для того чтобы каждый раз не объяснять назначение и способы описания и определения этих имен, мы сделаем это в данном разделе.

Подпрограммы для работы с окнами

Текст подпрограмм, выполняющих установку текущего (setwin), следующего (Nxtwin) и предыдущего (prevwin) окна, приведен в примере 2.8. Здесь мы обратим ваше внимание на следующие особенности, связанные с их использованием в примерах.

Прежде всего, обычно Макроассемблер не различает заглавные и строчные буквы в именах, независимо от их назначения. Поэтому, например, имена setwin, setwin и setwin для него тождественны. Буквы разного размера используются для того, чтобы человек мог визуально различить отдельные части составных имен. Если же вы принудительно заставите Макроассемблер различать строчные и заглавные буквы, что вполне возможно, то придется использовать только одну форму записи имен.

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

Основные переменные

Переменная – это последовательность байтов оперативной памяти, которым присвоено уникальное имя и в которых хранятся величины, применяемые при вычислениях. В командах обычно используются переменные, содержащие 1, 2 или 4 байта. Переменные, содержащие большее количество байтов, принято называть строками, массивами или таблицами.

Переменные обычно хранятся в отдельном сегменте оперативной памяти, который принято называть сегментом данных. В исходных текстах программ его наиболее распространенным именем является Data. Для большей наглядности рекомендуется располагать сегмент данных перед кодовым сегментом. В примере 2.11 показан вариант оформления сегмента данных и описания в нем основных переменных, используемых в последующих примерах. Способ определения (формирования значений) большинства из них был описан в данной главе (см. примеры 2.1-2.6).

Пример 2.11. Описания основных переменных в сегменте данных.

Data SEGMENT ; директива указывает начало сегмента
OldMode db 0 ; исходный видеорежим
NevMode dw 101h ; видеорежим VESA 101h
Vbuff dw 0А000h ; адрес видеобуфера
Horsize dw 640 ; количество точек в строке
Bperline dw 640 ; количество байтов в строке
Versize dw 480 ; количество строк на экране
Cur win dw 0 ; номер текущего окна
Cur pos dw 0 ; адрес (смещение) в текущем окне
GrUnit dw 0 ; единица приращения номера окна
VMC dd 0 ; адрес процедуры BIOS
winB db 0 ; параметры окна В
; Далее до конца сегмента располагаются другие описания
Data ENDS ; директива указывает конец сегмента

Описание сегмента открывает директива SEGMENT, а закрывает директива ENDS. Перед обеими директивами указывается одно и то же имя, в данном случае Data. Назначение и способы оформления сегментов описаны в Приложении Б данной книги.

В примере 2.11 описаны 11 основных переменных. Каждая из них имеет уникальное имя. После имени расположены директивы db, dw или dd, указывающие тип переменной, т. е. ее размер в байтах: db – байт (8 разрядов), dw – слово (16 разрядов), dd – двойное слово (32 разряда).

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.