Скачиваний:
25
Добавлен:
15.06.2014
Размер:
47.1 Кб
Скачать

Организация переходов в языке ассемблера.

Если команда перехода и точка перехода находятся в одном сегменте – то для перехода процессору достаточно изменить значение в IP – это и будет близкий переход. Если же точка перехода находится в другом сегменте чем команда перехода – процессору, для осуществления перехода, понадобится изменить значение как CS так и IP – это уже будет дальний переход. Короткий переход аналогичен близкому, за тем исключением, что для процессора 8086 он может осуществляться только в пределах –128…+127 байт от операции, следующей за командой перехода.

Безусловный переход

Безусловный переход изменяет адрес следующей исполняемой команды. Если процессор выполняет безусловный переход, то следующей обязательно будет выполняться команда, на которую указывает этот переход. При безусловных переходах в регистр IP (близкий переход) или CS:IP (дальний переход) загружаются значения новых адресов. Вместе CS:IP определяют адрес следующей исполняемой команды.

Безусловный переход осуществляется командой ассемблера jmp. Ниже приведен синтаксис данной команды:

jmp shortTarget

jmp short @@5

Короткий – на локальную метку@@5

jmp nearTarget

jmp finish

Близкий – на метку finish

jmp farTarget

jmp far count

Дальний – метка count в другом сегменте

jmp regW/memDW

jmp bx, jmp [word si]

Близкий – адрес перехода в bx, адрес перехода в ячейке, адресуемой содержимым si

jmp memDD

jmp [dword di]

Дальний – адрес в двойном слове, адресуемом содержимым di

Условные переходы.

Условные переходы осуществляют переход по целевому адресу в случае выполнения определенного условия, задаваемого состоянием флагов процессора.

Переходы для беззнаковых данных:

мнемоника

описание

флаги

je/jz

переход, если равно/нуль

ZF

jne/jnz

переход, если не равно/нуль

ZF

ja/jnbe

переход, если больше/не меньше или равно

ZF, CF

jae/jnb

переход, если больше или равно/не меньше

CF

jb/jnae

переход, если меньше/не больше или равно

CF

jbe/jna

переход, если меньше или равно/не больше

CF, AF

Переходы для знаковых данных:

мнемоника

описание

флаги

je/jz

переход, если равно/нуль

ZF

jne/jnz

переход, если не равно/нуль

ZF

jg/jnle

переход, если больше/не меньше или равно

ZF, SF, OF

jge/jnl

переход, если больше или равно/не меньше

SF, OF

jlb/jnge

переход, если меньше/не больше или равно

SF, OF

jle/jng

переход, если меньше или равно/не больше

ZF, SF, OF

Дополнительные арифметические проверки:

мнемоника

описание

флаги

js/jns

переход, если отрицательно/положительно

SF

jc/jnc

переход, если перенос/нет переноса

CF

jo/jno

переход, если переполнение/нет п.

OF

jp/jnp

переход, если четный/нечетный

PF

Условные переходы требуют целевого адреса – метки, обозначающей место в программе, с которого она продолжит исполняться в случае выполнения заданного условия. Метка должна находиться в пределах –128…+127 байт от адреса следующей инструкции. В случае нарушения данного условия ассемблер, во время компиляции, сообщит о соответствующей ошибке.

Соседние файлы в папке Ответы на билеты