Читайте также: |
|
Ассемблер имеет ряд операторов, которые позволяют упpавлять процессом ассемблирования и формирования листинга. Эти операторы называются псевдокомандами или директивами. Они действуют только в процессе ассемблирования программы и не генерируют машинных кодов.
Директива PAGE.
В начале программы можно указать количество строк, распечатываемых на одной странице, и максимальное количество символов на одной строке. Кроме того можно заставить ассемблер сделать прогон листа на конкретной строке, например, в конце сегмента. Для этого необходимо записать директиву PAGE без операндов.
Директива TITLE.
Для того, чтобы вверху каждой страницы листинга печатался заголовок (титул) программы, в следующем формате: TITLE текст. Рекомендуется в качестве текста использовать имя программы, под которым она находится в каталоге на диске.
Директива SEGMENT
Любые программы содержат по крайней мере один сегмент - сегмент кода. В некоторых программах используется сегмент для стековой памяти и сегмент данных для определения данных. Асcемблерная директива для описания сегмента SEGMENT имеет следующий формат:
Имя Директива Операнд
имя SEGMENT [параметры]
.
имя ENDS
Имя сегмента должно обязательно присутствовать, быть уникальным и соответствовать соглашениям для имен в ассемблере.
Директива ENDS
Обозначает конец сегмента. Обе директивы SEGMENT и ENDS должны иметь одинаковые имена.
Директива PROC
Сегмент кода содержит выполняемые команды программы. Кроме того этот сегмент также включает в себя одну или несколько процедур, определенных директивой PROC. Сегмент, содержащий только одну процедуру имеет следующий вид:
имя-сегмента SEGMENT PARA
имя-процедуры PROC FAR Сегмент
. кода
. с
. одной
RET процедурой
имя-процедуры ENDP
имя-сегмента ENDS
Имя процедуры должно обязательно присутствовать, быть уникальным и удовлетворять соглашениям по именам в ассемблере.
Директива ENDP
Определяет конец процедуры и имеет имя, аналогичное имени в директиве PROC.
Директива ASSUME
Процессор использует регистр SS для адресации стека, регистр DS для адресации сегмента данных и регистр CS для адресации cегмента кода. Ассемблеру необходимо сообщить назначение каждого сегмента.
Директива END
Как уже показано, директива ENDS завершает сегмент, а директива ENDP завершает процедуру.
15. Инициализация программы
Существует два основных типа загрузочных программ: EXE и COM. Рассмотрим требования к EXE-программам. DOS имеет четыре требования для инициализации ассемблерной EXE-программы:
1) указать ассемблеру, какие cегментные регистры должны соответствовать сегментам,
2) сохранить в стеке адрес, находящийся в регист ре DS, когда программа начнет выполнение
3) записать в стек нулевой адрес
4) загрузить в регистр DS адрес сегмента данных.
5)Выход из программы и возврат в DOS сводится к использова нию команды RET.
1. ASSUME - это ассемблерная директива, которая устанавливает для ассемблера соответствие между конкретными сегментами и сегментными регистрами; Ассоциируя сегменты с сегментными регистрами, ассемблер сможет определить смещения к отдельным областям в
каждом сегменте.
2. Загрузочному модулю в памяти непосредственно предшествует 256-байтовая (шест.100) область, называемая префиксом программного сегмента PSP. Программа загрузчика использует регистр DS для установки адреса начальной точки PSP. Пользовательская программа должна сохранить этот адрес, поместив его в стек. Позже, команда RET использует этот адрес для возврата в DOS.
3. В системе требуется, чтобы следующее значение в стеке являлось нулевым адресом. Для этого
команда SUB очищает регистр AX, вычитая его из этого же регистра AX, а команда PUSH заносит это значение в стек.
4. Загрузчик DOS устанавливает правильные адреса стека в регистре SS и сегмента кодов в регистре CS. Поскольку программа загрузчика использует регистр DS для других целей, необходимо инициализировать регистр DS двумя командами MOV.
5. Команда RET обеспечивает выход из пользовательской программы и возврат в DOS, используя для этого адрес, записанный в стек в начале программы командой PUSH DS.
Дата добавления: 2015-04-22; просмотров: 16 | Поможем написать вашу работу | Нарушение авторских прав |