Команда | Состояние флагов в eflags/flags | Условие перехода |
JCXZ | не влияет | если регистр CX=0 |
JECXZ | не влияет | если регистр ECX=0 |
Команду jcxz/jecxz удобно использовать со всеми командами, использующими регистр ecx/cx для своей работы. Это команды организации цикла и цепочечные команды. Очень важно отметить то, что команда jcxz/jecxz, в отличие от других команд перехода, может выполнять только близкие переходы в пределах -128...+127 байт, считая от следующей команды. Поэтому для нее особенно актуальна проблема передачи управления далее чем в указанном диапазоне. Для этого можно привлечь команду безусловного перехода jmp. Например, команду jcxz/jecxz можно использовать для предварительной проверки счетчика цикла в регистре cx для обхода цикла, если его счетчик нулевой.
(JuMP)
Переход безусловный
Схема команды: | jmp метка |
Назначение: используется в программе для организации безусловного перехода как внутри текущего сегмента команд, так и за его пределы. При определенных условиях в защищенном режиме работы команда jmp может использоваться для переключения задач.
Алгоритм работы:
Команда jmp в зависимости от типа своего операнда изменяет содержимое либо только одного регистра eip, либо обоих регистров cs и eip:
Состояние флагов после выполнения команды (за исключением случая переключения задач):
выполнение команды не влияет на флаги |
Применение:
Команду jmp применяют для осуществления ближних и дальних безусловных переходов без сохранения контекста точки перехода.
О б ъ е к т н ы й к о д (пять форматов):
Прямой переход внутри сегмента:
|11101001|disp-low|disp-high|
Прямой переход внутри сегмента (короткий):
|11101011|--disp--|
Косвенный переход внутри сегмента:
|11111111|mod100r/m|
Косвенный межсегментный переход:
|11111111|mod101r/m|
Прямой межсегментный переход:
|11101010|offset-low|offset-high|seg-low|seg-high|
(LOOP control by register cx)
Управление циклом по cx
Схема команды: | loop метка |
Назначение: организация цикла со счетчиком в регистре cx.
Алгоритм работы:
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги |
Применение:
Команду loop применяют для организации цикла со счетчиком. Количество повторений цикла задается значением в регистре ecx/cx перед входом в последовательность команд, составляющих тело цикла.
О б ъ е к т н ы й к о д: у11100010у--disp—у
(MOVe operand)
Пересылка операнда(1- применение)
Схема команды: | mov приемник,источник |
Назначение: пересылка данных между регистрами или регистрами и памятью.
Алгоритм работы:
копирование второго операнда в первый операнд.
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги |
Применение:
Команда mov применяется для различного рода пересылок данных, при этом, несмотря на всю простоту этого действия, необходимо помнить о некоторых ограничениях и особенностях выполнения данной операции:
О б ъ е к т н ы й к о д (семь форматов):
Регистр/память в/из регистр:
|100010dw|modregr/m|
Непосредственное значение в регистр/память:
|1100011w|mod000r/m|--data--|data если w=1|
Непосредственное значение в регистр:
|1011wreg|--data--|data если w=1|
Память в регистр AX (AL):
|1010000w|addr-low|addr-high|
Регистр AX (AL) в память:
|1010001w|addr-low|addr-high|
Регистр/память в сегментный регистр:
|10001110|mod0sgr/m| (sg - сегментный регистр)
Сегментный регистр в регистр/память:
|10001100|mod0sgr/m| (sg - сегментный регистр)
(MOVe operand to/from system registers)
Пересылка операнда в (или из них) системные регистры (2-применение)
Схема команды: | mov приемник,источник |
Назначение: пересылка данных между регистрами или регистрами и памятью.
Алгоритм работы:
копирование второго операнда в первый.
Состояние флагов после выполнения команды:
11 | 07 | 06 | 04 | 02 | 00 |
OF | SF | ZF | AF | PF | CF |
r | r | r | r | r | r |
Применение:
Команда mov применяется для обмена данными между системными регистрами. Это одна из немногих возможностей доступа к содержимому этих регистров. Данную команду можно использовать только на нулевом уровне привилегий либо в реальном режиме работы микропроцессора.
(MOVe String Byte/Word/Double word)
Пересылка строк байтов/слов/двойных слов
Схема команды: | movs приемник,источник movsb movsw movsd |
Назначение: пересылка элементов двух последовательностей (цепочек) в памяти.