Предыдущий раздел ПРОСТЫЕ ПРОГРАММЫ НА АССЕМБЛЕРЕ Следующий раздел

10.5. Метки

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

Максимальная длина метки – 31 символ. Это могут быть следующие символы:

1) латинские буквы – от А до Z  и от а до z;

2) цифры – от 0 до 9;

3) специальные символы – знак вопроса “?” ; знак “@” ; точка “.” ;

    подчеркивание “_”; доллар “$”.

Первым символом в метке должна быть буква или специальный символ. Точка может использоваться в метке только в качестве первого символа. В отличие от операционных систем WINDOWS, DOS, а также многих других программ, транслятор-ассемблер NASM различает заглавные и строчные буквы в именах меток.  Для него это совершенно разные символы. Примеры меток:  countPage25$E10. Весьма желательно, чтобы метки поясняли смысл программы, а не выбирались отвлеченно.

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

Особенно полезно применение локальных меток внутри процедур. Дело в том, что в разных процедурах часто используются идентичные метки. В процессе сборки исходной программы транслятором (такая сборка производится при обработке рассматриваемого позже псевдооператора %include) он выведет сообщения об ошибках только в том случае, если идентичные метки являются глобальными. Если эти метки оформлены как локальные, то никаких ошибок не будет, так как это совершенно различные метки. Заметим, что использование идентичных меток внутри процедур очень удобно для программиста, позволяя присваивать схожим фрагментам процедур одинаковые имена. Пример: использование метки “.Exit” для заключительного фрагмента процедуры.

Некоторые из буквенных слов зарезервированы транслятором-ассемблером и не могут быть использованы в качестве меток. Сюда относятся имена регистров (например АХ), мнемоники исполнительных команд (например  add), указатель на точку входа (..start), и псевдооператоры, например “end”.

 


Предыдущий раздел В начало Следующий раздел