Почему XOR EAX,EAX предпочтительнее MOV EAX,0 ? Какой способ очистки регистров самый лучший по кол-ву байт / по быстродействию ?
XOR короче, зато MOV быстрее. Зато для читаемости XOR точно несет смысл очистки регистра, а вот MOV - это воспринимается как a = 0.
Guru_of_Zen До сих пор стыдно за ту тему, но в общем-то вот. Да... и xor ни разу не быстрее, как здесь отдельные лица изволят заявлять.
Даже я из учебников ито знаю что xor короче, а людям верить надо =) Но от кампилятора может тоже зависит )))))))
sub reg,reg действительно хорош, поскольку при вычитании бит перенос никогда не встречается. xor reg,reg распознается процессором, и тот пуляет 0
Собственно в чём проблема ? Судя по вопросу автор не будет исполнять свой код в не выгружаемой памяти с нулевым кпл. Значит значения не имеет ксор, вычитание или стопяцот инструкций вместо этого. Тоглько не нужно примеров и логи профайлера с миллионами итераций - на практике это не юзается
впрочем в манах интела по оптимизации наряду с xor reg, reg указан и sub reg, reg так что рекомендация зубкова неясна.
какую ссыль на тему? ссыль на профиль, а 30 паг листать и искать нужную - непонятно по каким критериям причем - желания нету .
Guru_of_Zen Блин... Прошу прощения... Думал, что это ссылка на тему. http://www.wasm.ru/forum/viewtopic.php?id=16412
спасибо, вкуриваю. зы. Почему? Вопрос по Ведению в машинный код и программированию под ДОС - никогда б не догадался по названию о чем там речь.
MOV быстрее XOR? Я думал как. У обоих команд данные вводятся параллельно (разряды независимы друг от друга и каж. разряд можно заносить / ксорить одновременно с остальными). Но зато XOR устанавливает флаги. Вот я и решил что XOR медленнее. Если верить справке по опкодам Код (Text): XOR (2 байта) Clocks Operands 808x 286 386 486 Bytes reg,reg 3 2 2 1 2 MOV (2-4 байта) Clocks Operands 808x 286 386 486 Bytes reg,reg 2 2 2 1 2 То на современных 486 обе команды работают 1 такт. Это относится и к 'mov reg,mem' хотя тут процессору нужно обращение к памяти для получения этого 'mem' (н-р, 'mov eax,[402052]'). В этих случаях mov работает медленнее. А вот если значение 0h записано непосредственно в команде, то также.