Цель работы: изучить синтаксис написания подпрограмм на языке Assembler, научиться использовать операторы сохранения и извлечения значений из стека, получить навыки использования процедур при низкоуровневом программировании.
Для выполнения работы студент должен: знать понятия процедуры и функции, их отличия, уметь логически выделять в программе подпрограммы.
Теоретические сведения
6.1.1 Структура подпрограммы. Вызов подпрограммы
Подпрограммы позволяют сократить объём текста программы, применять модульный принцип построения программ, использовать одни и те же подпрограммы в различных программах, что значительно сокращает время создания программ и уменьшает время отладки.
Описание подпрограммы в языке ассемблер имеет структуру, представленную в листинге 6.1.
Листинг 6.1 Структура подпрограммы
<имя процедуры> proc <тип процедуры>
. . .
Операторы тела подпрограммы
. . .
ret [<выражение>]
<имя процедуры> endp
<тип процедуры> - определяет тип перехода: near (близкий), far (дальний). Если тип не задан, по умолчанию принимается near. Тип перехода near показывает, что тело процедуры описано в том же сегменте, что и её вызов. Тип перехода far обеспечивает вызов процедуры из других сегментов, с другим значением регистра CS. Такие процедуры обычно используются как отдельные объектные модули или в составе библиотек.
ret [<выражение>] - выполняет возврат из процедуры в вызывающую программу. В зависимости от типа процедуры, эта команда восстанавливает из стека значение IP (ближний вызов) или CS:IP (дальний вызов). Эта команда не обязана быть последней по тексту процедуры, но является последней по порядку выполнения. Значение <выражение> указывает размер стека в байтах, восстанавливаемого при возврате из процедуры. Восстановление стека необходимо производить при передаче параметров процедуры через стек. Так как работа со стеком выполняется словами, значение <выражение> всегда должно быть кратным двум.