Имена параметров и переменных



Имена параметров и переменных

Запись адреса в явном виде вполне корректна, но не наглядна. Для того чтобы текст подпрограммы был более понятен, при визуальном анализе лучше использовать имена.
Особенность данного случая в том, что переменные и параметры распределяются не статическим, а динамическим способом. Это не позволяет использовать для их описания обычные директивы db, dw и пр. Вместо этого используется директива EQU (эквивалентно). Перед ней указывается имя параметра или переменной, а после нее описание адреса и размера.

Предположим, что внешней подпрограмме передаются два параметра, каждый из которых имеет размер слова. Один их них задает ширину строки на экране в точках, а второй — количество строк на экране. В главе 2 для обозначения этих величин были введены имена Horsize и versize. Для присвоения этих имен параметрам в текст модуля подпрограммы надо включить две следующие директивы:

Horsize EQU word ptr [bp + 6] ; количество точек в строке Versize EQU
word ptr [bp + 8] ; количество строк на экране

В этом примере предполагается, что перед вызовом внешней процедуры в стек сначада было записано значение параметра versize, а затем Horsize, например, так:

@Invoke имя_подпрограммы <Versize, Horsize>

Только в таком случае описание параметров соответствует их реальному расположению в стеке.

Обычно директивы EQU размещаются в начале тела модуля, вне сегмента (или вне сегментов). Имена, присвоенные в подпрограмме, являются локальными, поэтому вполне допустимо их совпадение с именами, описанными в основной программе или в других подпрограммах.

При указанном описании параметров для вычисления количества точек на экране в тексте подпрограммы выполняются следующие две команды:

mov ах, Horsize ; ах = количество точек в строке mui Versize
; dx:ax = Horsize * Versize

Описание промежуточных переменных отличается от описания параметров только указанием отрицательного смещения относительно bp, пример:

Address EQO word ptr [bp — 2] ; описание переменной Address

Следует отметить, что последовательность директив EQU является своеобразным описанием формальных параметров. Если такие директивы включены в текст модуля, то по его распечатке можно определить тип и последовательность указания параметров при вызове процедуры.



- Начало - - Назад - - Вперед -