Петля, петля, петля? - PullRequest
       10

Петля, петля, петля?

9 голосов
/ 18 ноября 2009

В чем разница между инструкциями по сборке LOOP, LOOPE и LOOPNE?

Ответы [ 4 ]

20 голосов
/ 18 ноября 2009

LOOP уменьшает ecx и проверяет, не является ли ecx нулем, если это условие выполняется, оно переходит на указанную метку, в противном случае проваливается.

LOOPE уменьшает ecx и проверяет, что ecx не равен нулю и ZF установлен - если эти условия выполняются, он переходит на метку, в противном случае проваливается.

LOOPNE такой же, как LOOPE, за исключением того, что для выполнения прыжка требуется, чтобы ZF не был установлен (т. Е. Был равен нулю).

5 голосов
/ 18 ноября 2009

Время для Справочника по Google Книгам

РЕДАКТИРОВАТЬ: Краткое содержание по ссылке: LOOPE и LOOPNE, по сути, инструкции LOOP с одной дополнительной проверкой. LOOPE зацикливает «пока нулевой флаг», что означает, что он будет зацикливаться до тех пор, пока нулевой флаг ZF равен единице, а приращение не достигнуто, а LOOPNE зацикливается «пока не нулевой флаг», что означает, что он продолжает цикл, пока ZF равен нулю и шаг не достигнут. Помните, что ни одна из этих инструкций по сути не влияет на состояние ZF.

1 голос
/ 02 июля 2011

Инструкции LOOP, а также JCXZ / JECXZ немного медленные; тем не менее, они по-прежнему имеют свое место в современном коде.

Высокая скорость не всегда является проблемой в петлях. Например, если мы выполняем цикл только один раз во время инициализации программы и количество итераций мало, необходимое время не будет замечено.

Другим примером является цикл, в котором вызываются функции Windows API; время, потраченное на вызов API, вероятно, делает время выполнения LOOP тривиальным. Опять же, это применимо, когда количество итераций мало.

Считайте эти инструкции «другим инструментом в вашем наборе инструментов»; используйте правильный инструмент для работы;)

1 голос
/ 18 ноября 2009

Вы пытались найти его в справочнике по набору команд, , например, в этом по Intel ?

...