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

4.11 Команда выхода из подпрограммы

RET — возврат из процедуры (return from procedure — возврат из процедуры). Ко­манда извлекает из стека адрес возврата и возвращает управление из процедуры, вызванной ранее командой CALL. Если процедура имеет атрибут near, то команда RET извлекает из стека одно слово и заносит его в регистр IP; если процедура имеет атрибут far, то команда RET извлекает из стека два слова: сначала смещение адреса, а затем адрес сегмента, и заносит их соответственно в регистр IP и в регистр CS. Флаги не меняются.

Процедуры могут быть вложенными, глубина вложения любая (ограничивается лишь емкостью стека).

4.12 Команды условной передачи управления

Есть 31 команда условной передачи управления (УПУ), но некоторые попарно совпадают, например: если > и если не < и не =. Разных команд всего 17. УПУ может быть только near и short, то есть метка перехода должна быть в том же сег­менте и не далее ±128 байт от УПУ.

Общий формат команды:

J* метка

где J* — jump условие — передача управления при выполнении условия.

Команда передает управление по прямому адресу — метке, если условие, указан­ное в команде, выполняется; в противном случае выполняется следующая по по­рядку команда. Выполнение условия определяется состояниями флагов регистра FL, которые установлены по результатам предыдущих формирующих условие пере­хода операций: арифметических, логических, сравнения и т. д.

Команды условной передачи управления могут быть знаковыми (условие прове­ряется с учетом знака операндов) и беззнаковыми (условие проверяется по абсо­лютным значениям операндов). Каким типом УПУ пользоваться, определяется по содержанию решаемой задачи и, соответственно, типами данных (знаковых или беззнаковых), над которыми выполнялись операции, формирующие условие пе­рехода.

Надо четко различать J* без знака (если сравниваются целые, без знака) и со зна­ком (если сравниваются целые со знаком), иначе результат будет совсем не тем (неверным).

Например, пусть регистр АХ содержит 11000110, а регистр ВХ — 00010110, и команда CMP AX, BX сравнивает содержимое этих регистров. Если данные беззнаковые, то число в АХ больше, а если знаковые — то меньше (поскольку в последнем случае еди­ница в крайнем левом разряде определяет знак числа — в АХ число отрицательное).

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

  • JA/JNBE (Jump if Above/Not Below nor Equal) — переход, если выше/не ниже или равно (переход, если флаги ZF = 0 и CF = 0).

  • JAE/JNB (Jump if Above or Equal/Not Below) — переход, если выше или равно/не ниже (CF = 0).

  • JB/JNAE (Jump if Below/Not Above nor Equal) — переход, если ниже/не выше или равно (CF =1).

  • JBE/JNA (Jump if Below or Equal/Not Above) — переход, если ниже или равно/не выше (CF = 1 или AF = 1).

4.14 Команды условной передачи управления для знаковых данных

  • JG/JNLE (Jump if Greater/Not Less nor Egual) — переход, если больше/не мень­ше или равно (ZF = 0 и SF = OF).

  • JGE/JNL (Jump if Greater or Equal/Not Less) — переход, если больше или равно/ не меньше (SF = OF).

  • JL/JNGE (Jump if Less/Not Greater nor Equal) — переход, если меньше/не боль­ше или равно (SF><OF).

  • JLE/JNG (Jump if Less or Equal/Not Greater) — переход, если меньше или равно/ не больше (ZF=1 или SF><OF).