Имена параметров и переменных
Имена параметров и переменных
Запись адреса в явном виде вполне корректна, но не наглядна. Для того чтобы текст подпрограммы был более понятен, при визуальном анализе лучше использовать имена.
Особенность данного случая в том, что переменные и параметры распределяются не статическим, а динамическим способом. Это не позволяет использовать для их описания обычные директивы 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 является своеобразным описанием формальных параметров. Если такие директивы включены в текст модуля, то по его распечатке можно определить тип и последовательность указания параметров при вызове процедуры.