тестирование, если регистр равняется себе в ia32

(ia32), например,

test $eax, $eax

почему Вы когда-либо хотели бы сделать это? это делает $eax & $eax, право? не был должен это всегда устанавливать регистр флага, чтобы сказать, что они равны..?

приложение: таким образом, тест установит ZF (как упомянуто ниже), если регистр будет нулем. так тест (как используется выше), главным образом просто раньше говорили, пуст ли регистр? и ZF установлен раз так?

8
задан Tony Stark 10 May 2010 в 23:47
поделиться

3 ответа

Он установит ZF (нулевой флаг), если регистр равен нулю. Это, вероятно, то, что чаще всего используется для проверки. Он также установит другие флаги, но они, вероятно, используются гораздо реже.

Также следует отметить, что test на самом деле не выполняет сравнения - он выполняет побитовую операцию и (отбрасывая результат, за исключением флагов).

Для сравнения операндов используется инструкция cmp, которая выполняет операцию sub, отбрасывая результаты за исключением флагов. Вы правы, что a

cmp $eax, $eax

не имеет особого смысла, так как флаги будут устанавливаться каждый раз в соответствии с нулевым результатом.

10
ответ дан 5 December 2019 в 12:56
поделиться

Это установка нулевого флага, точно так же, как использование или $eax,$eax может недеструктивно проверить и нулевой флаг.

1
ответ дан 5 December 2019 в 12:56
поделиться

Он устанавливает флаги Z и S на процессоре, поэтому после команды "test eax,eax" (или любого другого регистра 8, 16, 32 и, кажется, 64 бит) вы можете узнать, равно ли значение нулю или установлен ли бит знака, используя "je/jne/jz/jnz" или "js/jns" соответственно. За 30 лет кодирования для архитектур x80/x86 я делал это огромное количество раз, с большинством комбинаций регистров. (Вы не используете это на практике на ESP!)

IIRC, есть бит четности, который тоже вычисляется, так что, выполнив этот тест, вы можете определить, четное или нечетное количество битов, установленных в регистре, используя "jp/jnp". Я никогда не пользовался этим.

1
ответ дан 5 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: