logo

Главная Система команд x86 Базовая система команд CPU LOOP

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

LOOP

Управление циклом со счетчиком в ECX

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

 

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

E2 cb

LOOP rel8

Уменьшить (E)CX и выполнить короткий переход, если (E)CX <> 0

8086

loop met2

E1 cb

LOOPE rel8

Уменьшить(E)CX и выполнить короткий переход, если (E)CX<>0 и ZF=1

8086

loope met2

E1 cb

LOOPZ rel8

Уменьшить(E)CX и выполнить короткий переход, если (E)CX<>0 и ZF=1

8086

loopz met2

E0 cb

LOOPNE rel8

Уменьшить(E)CX и выполнить короткий переход, если (E)CX<>0 и ZF=0

8086

loopne met2

E0 cb

LOOPNZ rel8

Уменьшить(E)CX и выполнить короткий переход, если (E)CX<>0 и ZF=0

8086

loopnz met2

Описание:

Команда LOOP уменьшает регистр-счетчик без изменения какого-либо из флагов. Затем проверяются условия характерные для конкретной формы используемой команды LOOP. Если условия удовлетворяются, то происходит короткий переход на метку, заданную операндом команды LOOP.

Если атрибут размера адреса равен 16 бит, то в качестве счетчика используется регистр CX, иначе — ECX.

Операнд команды LOOP — это знаковое непосредственное значение в диапазоне от -128 до +127, оно задает смещение точки перехода относительно первого байта следующей команды.

Команды LOOP обеспечивают циклический контроль и объединяют индексное управление циклом с условным ветвлением. Условные формы команды LOOPcond наряду с анализом значения в регистре (E)CX проверяют состояние флага ZF. Следует понимать, что сама команда LOOPcond не оказывает никакого влияния на этот флаг, его значение определяется результатом исполнения предшествующих команд, которые исполняются в теле цикла.

Операция:

IF Address = 16 THEN CountReg is CX; ELSE CountReg is ECX; FI;

CountReg = CountReg - 1;

IF (Команда не LOOP)

THEN

  IF (Команда LOOPE) OR (Команда LOOPZ))

     THEN BranchCond = (ZF = 1) AND (CountReg ¹ 0)

  FI;

  IF (Команда LOOPNE) OR (Команда LOOPNZ))

     THEN BranchCond = (ZF = 0) AND (CountReg ¹ 0)

  FI;

FI;

IF BranchCond

THEN

  IF OperandSize = 16

     THEN IP = IP + SignExtend(rel8);

     ELSE (* OperandSize = 32 *)

        EIP =EIP + SignExtend(rel8);

  FI;

FI;

Особые ситуации защищенного режима:

#GP(0), если смещение точки, к которой осуществляется переход, находится вне пределов текущего кодового сегмента.

Особые ситуации режима реальной адресации:

Нет.

Особые ситуации режима V86:

Нет.


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники