Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

"mov eax,0" и "xor eax,eax" это ведь коды? Где используются "mov eax,0" и "xor eax,eax"?

Haceymer Знаток (280), закрыт 10 лет назад
Лучший ответ
Миоко Таканава Гений (51590) 10 лет назад
Это не коды, а мнемоники инструкций процессоров семейства i80x86.
Обе эти инструкции используются для обнуления регистра eax.

mov eax, 0 просто загружает в регистр ноль.
xor eax, eax выполняет над содержимым регистра операцию поразрядное исключающее или или по-другому функцию XOR. Если соответствующие разряды операндов равны, то результирующий бит будет равен нулю. А так как оба операнда - один и тот же регистр (eax := eax XOR eax), то в результате получится 32-разрядный ноль, как и в случае с mov.

Разница между этими командами:
- в размере кода: mov eax, 0 на три байта длиннее, чем xor eax, eax.
- в оказываемом влиянии на регистр флагов процессора: mov не изменяет никакие флаги, xor сбрасывает CF, AF, SF и устанавливает ZF и PF.
- во времени выполнения команды: mov и xor выполняются разное количество тактов, но на современных суперскалярных процессорах эта разница сходит на нет. Обе инструкции полностью выполнятся, находясь ещё в самом начале конвейера.

Чаще используется xor eax, eax просто потому что она короче и по старой привычке, так как когда-то давно она выполнялась быстрее mov.
mov eax, 0 используют, когда необходимо сохранить состояния флагов после выполнения предыдущей операции.

Кстати, компиляторы с языков высокого уровня, даже оптимизирующие, для обнуления регистра в подавляющем большинстве случаев вставят инструкцию mov eax, 0.
Остальные ответы
tony Профи (621) 10 лет назад
Ассемблер. . Этим все сказано.)
Strike Гуру (3164) 10 лет назад
mov eax,0
в регист aex помещается 0

xor eax,eax
0 xor 0 = 1 тоесть в регистре получателе образуется 1

асемблер
Похожие вопросы