Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania_k_kursovomu_proektu_VMSi....doc
Скачиваний:
17
Добавлен:
20.04.2019
Размер:
4.98 Mб
Скачать

Директивы ассемблера

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

С помощью директив одного типа определяются слова данных. Они позволяют ассемблеру сформировать константу и поместить ее в ячейку памяти. Значение константы задается в поле операндов, а ее символический адрес — в поле метки. Аналогичным образом можно задать символ в коде ASCII. Предположим, например, что мнемони­ческий код операции DB (Define a Byte — определить байт) соответ­ствует директиве определения байта. Тогда при трансляции предло­жения

CONST : DB 53H

ассемблер поместит шестнадцатеричное число 53 в ячейку с символи­ческим адресом CONST.

С помощью директив другого типа можно зарезервировать группу ячеек памяти и дать этой группе символическое имя. Это оказывается полезным, когда нужно отвести место для входных, выходных или промежуточных данных. Число резервируемых ячеек указывается в поле операндов, а символический адрес первой ячейки группы - в поле метки. Директива такого типа встречается в программе в табл.5.9 и имеет мнемонический код операции RES (от REServe - резервировать). Встретив предложение

NUM: RES 10D

ассемблер зарезервирует десять ячеек памяти (поскольку D - это код десятичной системы), причем первой из них будет присвоен сим­волический адрес NUM.

Помимо уже упомянутых директив, существуют директива для задания абсолютного адреса в объектной программе и директива для указания конца программы. Вторая из них присутствует в программе в табл. 5.9 и имеет обозначение END (конец). Она просто указывает ассемблеру, где заканчивается исходная программа. Чтобы пояснить директиву, задающую абсолютный адрес, предположим, что ее мне­моническое обозначение ORG (от ORiGin — начало). Тогда предло­жение

ORG 1000H

информирует ассемблер о том, что следующая команда должна иметь шестнадцатеричный адрес 1000. Поэтому, если бы такое предложение предшествовало программе в табл. 5.9, адрес команды LRI 1, Н (NUM) оказался бы равным 1000; в то же время, если бы это предло­жение оказалось между предложениями HLT и RES, группа ячеек NUM расположилась бы в памяти, начиная с адреса 1000.

Макрокоманда

Некоторые ассемблеры предоставляют программисту возможности для расширения языка ассемблера при помощи макрокоманд. Макро­команды особенно удобны в тех случаях, когда некоторая последова­тельность команд повторяется в программе много раз. В таких слу­чаях можно определить макрокоманду, соответствующую этой после­довательности. Макрокоманда становится составной частью языка ассемблера, и ее после этого можно использовать в программе как угодно часто. Каждое вхождение макрокоманды в программе при тран­сляции' заменяется ассемблером на последовательность машинных команд, которые входят в определение макрокоманды.

Очень важно понимать разницу между макрокомандой и подпро­граммой. К подпрограмме обращаются при помощи команды перехода на подпрограмму и возвращаются из нее по команде возврата. Сама подпрограмма находится в памяти в единственном экземпляре, к которому, вообще говоря, обращаются несколько раз. Макро­команде соответствует последовательность команд, и эта последователь­ность вставляется в программу на место каждого вхождения макро­команды. Таким образом, одна и та же последовательность команд повторяется в программе много раз, возможно, только с изменением адресов операндов от одного вхождения к другому. Поэтому, вообще говоря, программа с макрокомандами требует больше места в памяти, чем программа, использующая подпрограммы. Однако при использо­вании макрокоманд накладные расходы на связи с подпрограммой ис­чезают и скорость работы программы увеличивается.

Приложение П1