Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МАВЦ.464319.001ТУ 20140414 Семенов.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
2.98 Mб
Скачать

I.Команды безусловной передачи данных

JMP opr — команда безусловной передачи управления (jump unconditionally — пе­рейти безусловно). Операнд OPR может быть задан прямым или косвенным адресом:

  • по прямому адресу: JMP метка

Если метка в том же сегменте, что и команда JMP, переход считается внутрен­ним (near),

если не в том же сегменте — переход внешний (far). В самой коман­де JMP разницы нет; тип перехода определяется видом метки: после метки для внутреннего перехода ставится двоеточие :. Транслятор по таблице меток и их адресов сам определяет атрибуты near или far и соответственно транслирует команду передачи управления в более короткую или более длинную команду (более длинную, так как надо менять не только содержимое смещения IP, но и регистра сегментов CS). Несколько сократить длину команды может указа­ние программиста «JMP short метка» о том, что метка не далее ±128 байт от команды JMP (это указание не обязательно, но если оно есть и ошибочно, то транс­лятор выдаст ошибку).

  • по косвенному адресу. Косвенный адрес может быть задан: в регистре: JMP r или в памяти: JMP символьное_имя;

  • в памяти с косвенной адресацией: JMP near ptr [SI]; JMP far ptr [ВХ] и т.д.

В последних двух командах near ptr и far ptr указывать обязательно, так как какое слово содержится в регистре SI — обычное или двойное, — ассемблер заранее не знает и ему нужно помочь.

4.9 Команды перехода к подпрограмме и выхода из подпрограммы

Подпрограммы оформляются как процедуры. Процедура начинается меткой — именем процедуры и заканчивается командой выхода ret (return). В программе процедура помещается в операторные скобки:

proc … endp

Около оператора proc могут быть указаны атрибуты дистанции: near — близкая процедура (в том же сегменте) или far — далекая процедура (если этот атрибут опущен, то подразумевается near).

Пример: DISP proc far ; в отличие от метки после имени процедуры двоеточие не ставится:

ret

DISP endp

4.10 Команда перехода к подпрограмме: call opr

Вызов процедуры (call a procedure — вызов процедуры), безусловная передача управления, выполняющая короткий или длинный вызов процедуры. Флаги — не меняются.

В команде CALL атрибуты near или far указывать не надо, так как ассемблер нуж­ную информацию получит сам из директивы определения процедуры. По команде CALL должно быть выполнено:

  • запоминание в стеке адреса возврата (содержимого IP и CS для следующей ко­манды: 16 бит — если near, и 32 бит — если far);

  • переход к выполнению процедуры (инициируется записью в IP и в CS (если far) нового адреса команды).

Операнд OPR, определяющий адрес процедуры, может быть:

  • непосредственным: CALL имя_процедуры;

  • прямым — процедуру с атрибутом near можно вызвать через регистр, в котором содержится смещение адреса процедуры: CALL r;

  • косвенным:

  1. процедуру с атрибутом near можно вызвать, используя переменную размером в слово: CALL word ptr символьное_имя,

  2. процедуру с атрибутом far — используя переменную размером в двойное слово: CALL dword ptr символьное_имя.