Опишите состав и назначение команды безусловного перехода мп

  • cs — сегментный регистр кода, в котором находится физический (базовый) адрес текущего сегмента кода;

· eip/ip — регистр указателя команды, в котором находится значение, представляющее собой смещение в памяти следующей команды, подлежащей выполнению, относительно начала текущего сегмента кода.

Таким образом, команды передачи управления изменяют содержимое регистров cs и eip/ip, в результате чего микропроцессор выбирает для выполнения не следующую по порядку команду программы, а команду в некотором другом участке программы.

Модификаторы:

  • near ptr — прямой переход на метку внутри текущего сегмента кода. Модифицируется только регистр eip/ip на основе указанного в команде адреса (метки) или выражения,
  • far ptr — прямой переход на метку в другом сегменте кода. Адрес перехода задается в виде непосредственного операнда или адреса (метки) и состоит из 16-битного селектора и 16/32-битного смещения, которые загружаются, соответственно, в регистры cs и ip/eip;
  • word ptr — косвенный переход на метку внутри текущего сегмента кода. Модифицируется (значением смещения из памяти по указанному в команде адресу, или из регистра) только eip/ip. Размер смещения 16 или 32 бит;
  • dword ptr — косвенный переход на метку в другом сегменте кода. Модифицируются (значением из памяти — и только из памяти, из регистра нельзя) оба регистра, cs и eip/ip. Первое слово/двойное слово этого адреса представляет смещение и загружается в ip/eip; второе/третье слово загружается в cs.

Команда безусловного перехода jmp

Синтаксис команды безусловного перехода
jmp [модификатор] адрес_перехода - безусловный переход без сохранения информации о точке возврата.

Всего в системе команд микропроцессора есть несколько кодов машинных команд безусловного перехода jmp.
Их различия определяются дальностью перехода и способом задания целевого адреса.
Дальность перехода определяется местоположением операнда адрес_перехода. Этот адрес может находиться в текущем сегменте кода или в некотором другом сегменте. В первом случае переход называется внутрисегментным, или близким, во втором — межсегментным, или дальним.
Внутрисегментный переход предполагает, что изменяется только содержимое регистра eip/ip.
Можно выделить три варианта внутрисегментного использования команды jmp:

  • прямой короткий;
  • прямой;
  • косвенный.





Опишите состав и назначение команд условного перехода

JCC – команда условного перехода           

Синтаксис: jcc метка

Осущ переход внутри текущего сегмента команд в соответствии с условием.

Команды условного перехода удобно применять для проверки различных условий, возникающих в ходе выполнения программы. Ниже приведены перечень команд условного перехода, анализируемые ими флаги и соответствующие им логические условия перехода.

 

Коман Сост провер фл Усл перехода
JA CF = 0 и ZF = 0 Выше(беззнак
JAE CF = 0 выше или =
JB CF = 1 ниже
JBE CF=1илиZF=1 ниже или =
JG ZF=0иSF=OF >(знаковые)
JGE SF = OF Больше или=
JL SF <> OF меньше
JLE ZF=1 или SF <> OF меньше или=
JC CF = 1 перенос
JE ZF = 1 равно
JZ ZF = 1 0
JNA CF=1иZF =1 не выше
JNAE CF = 1 не выше или=
JNB CF = 0 не ниже
JNBE CF=0 и ZF=0 не ниже и не=
JNC CF = 0 нет переноса
JNE ZF = 0 не равно
JNG ZF = 1 или SF <> OF не больше
JNGE SF <> OF не бол или=
JNL SF = OF не меньше
JNLE ZF=0и SF=OF не меньш или=
JNO OF=0 нет переполн.
JNP PF = 0 Нет четности
JNS SF = 0 Нет знака
JNZ ZF = 0 нет нуля
JO OF = 1 переполнение
JP PF = 1 Четность
JPE PF = 1 Четное
JPO PF = 0 Не четное
JS SF = 1 Знак

JCXZ/JECXZ Переход, если выполнено условие / Переход, если CX/ECX равен нулю.

 

Опишите состав и назначение команд работы с циклами

Эти команды используют регистр ecx/cx как счетчик цикла.
loop метка_перехода (Loop) — повторить цикл. Команда позволяет организовать циклы, подобные циклам for в языках высокого уровня с автоматическим уменьшением счетчика цикла. Работа команды заключается в выполнении следующих действий:

декремента регистра ecx/cx;

сравнения регистра ecx/cx с нулем:

если (ecx/cx) > 0, то управление передается на метку перехода;

если (ecx/cx) = 0, то управление передается на следующую после loop команду.

loope/loopz метка_перехода (Loop till cx <> 0 or Zero Flag = 0) — повторить цикл, пока cx <> 0 или zf = 0.
Команды loope и loopz — абсолютные синонимы, поэтому используйте ту команду, которая вам больше нравиться. Работа команд заключается в выполнении следующих действий:

декремента регистра ecx/cx;

сравнения регистра ecx/cx с нулем;

анализа состояния флага нуля zf:

если (ecx/cx) > 0 и zf = 1, управление передается на метку перехода;

если (ecx/cx) = 0 или zf = 0, управление передается на следующую после loop команду.

loopne/loopnz метка_перехода (Loop till cx <> 0 or Not Zero flag=0) — повторить цикл пока cx <> 0 или zf = 1.
Команды loopne и loopnz также абсолютные синонимы. Работа команд заключается в выполнении следующих действий:

декремента регистра ecx/cx;

сравнения регистра ecx/cx с нулем;

анализа состояния флага нуля zf:

если (ecx/cx) > 0 и zf = 0, управление передается на метку перехода;

если (ecx/cx)=0 или zf=1, управление передается на следующую после loop команду.

Команды loope/loopz и loopne/loopnz по принципу своей работы являются взаимообратными. Они расширяют действие команды loop тем, что дополнительно анализируют флаг zf, что дает возможность организовать досрочный выход из цикла, используя этот флаг в качестве индикатора.

Недостаток команд организации цикла loop, loope/loopz и loopne/loopnz в том, что они реализуют только короткие переходы (от –128 до +127 байт). Для работы с длинными циклами придется использовать команды условного перехода и команду jmp





Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: