Разница между «или eax, eax» и «test eax, eax» [дубликат]

На этот вопрос уже есть ответ:

Проверьте, равен ли регистр нулю с CMP reg, 0 против OR reg, reg? 2 ответа

Какая разница междуor eax,eax а такжеtest eax,eax? Я видел, как разные компиляторы производят оба для одного и того же сравнения, и что касается документации, они делают одно и то же, поэтому мне интересно, почему они не все используютtest eax,eax. Думая об этомand eax,eax будет устанавливать флаги таким же образом, как и я, но я не видел их ни в freepascal, ни в delphi, ни в msVC ++.

Я скомпилировал некоторые блоки asm в delphi и проверил исходный код на ассемблере. Все 3 формы имеют одинаковую длину в кодах операций, а также проверили производительность Intel PDF и говорят, что они имеют одинаковую задержку и пропускную способность.

Редактировать
Вопрос конкретно о разнице между конкретными случаямиtest eax,eax, or eax,eax а такжеand eax,eax. Все 3 дают абсолютно идентичные результаты для регистров, флагов, длины кода операции, задержки, пропускной способности. И все же для проверки, если 0, если не ноль, или если подписано, некоторые компиляторы будут использоватьtest eax,eax а некоторые используютor eax,eax и мне было интересно, почему они не все используютtest eax,eax поскольку это делает код немного более понятным.

Edit2:
Для справки, я дома и имею только MSvc ++ и Delphi, но тестирую переменную, если ноль, msvc ++ делаетtest eax,eax, а Делфиor eax,eax.

Ответы на вопрос(3)

Ваш ответ на вопрос