Это не коды, а мнемоники инструкций процессоров семейства 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.
Другие языки программирования и технологии
"mov eax,0" и "xor eax,eax" это ведь коды? Где используются "mov eax,0" и "xor eax,eax"?
mov eax,0
в регист aex помещается 0
xor eax,eax
0 xor 0 = 1 тоесть в регистре получателе образуется 1
асемблер
в регист aex помещается 0
xor eax,eax
0 xor 0 = 1 тоесть в регистре получателе образуется 1
асемблер
Ассемблер. . Этим все сказано.)
Похожие вопросы
- объясните как именно работает цикл (int i = 0; i < N; i++) в этом коде, почему нельзя написать i+1, вместо i++
- Ассемблер. При выполнении серии умножений происходит переполнение EAX.
- Что делает команда mov ds, ax ?
- кто разбирается в html? дали легкое задание, но я вообще 0. Помогите с кодом
- Помогите разобраться с кодом. Ошибка в строчке for (int i = 0, i > 100, i++) {
- Помогите разобраться с форматом MOV
- Добрый день! Помогите выполнить вычитание в прямом, обратном и дополнительном кодах: 0,111101101- 0,101111010
- почему в технических средствах информатики используется двоичный код?
- Для чего служит операция xor в ассемблере. Буду очень признательна за полный ответ или ссылку.
- Ассемблерная вставка в С .Странный код. Можете расшифровать?