Ответы на билеты / Билет_10_
.docОрганизация переходов в языке ассемблера.
Если команда перехода и точка перехода находятся в одном сегменте – то для перехода процессору достаточно изменить значение в 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 байт от адреса следующей инструкции. В случае нарушения данного условия ассемблер, во время компиляции, сообщит о соответствующей ошибке.