![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 750
|
![]()
Почему везде используется
Код:
Код:
Этому есть какое-то рациональное объяснение?
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
![]() |
![]() |
![]() |
#2 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Ксор быстрее исполняется.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]() |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
|
![]() |
![]() |
![]() |
#5 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
40 лет назад когда 8086 ещё не было архитектура процессоров была такова. Что читался опкод и если там был признак IMM, то читалось число. Соответственно получалось что для ксора 1 так уходил на декодирование и 1 на исполнение всего 2 такта. А присвоения выполнение занимало 3 такта.
Так продолжалось до конца 80-тых годов когда в процессоры стали встраивать блок переупорядочение команд(вне очередное исполнение). Из-за того что MOV ESI,0 влияет на регистр флагов она не может упорядочиться. По сути она состояла из двух микро команд, против ксора который имел одну микро команду. Так было в Pentium 1. Потом инженеры почасали репу подумали и отменили у половины команд половину флагов. По скорости команды сравнялись. PII. Ввели в "порт" загрузки/выгрузки распознавание MOV,0 как XOR. Но опкод то короче! Поэтому за счёт того что циклы с ксором корое они лучше влазят в кэш. Отсутствую кэш промахи. И предсказатель ветвления лучше работает на малых циклах. Так что ксор продолжал лидировать по скорости. И вот пару лети назад ввели возможность исполнение коротких циклов прямо через кэш мопсов. Тогда эти операции окончательно сравнялись по скорости. Но маркетологи специально делают процессоры с худшими характеристиками и продают их дешевле. Так что это ещё не в каждом процессоре есть. На заметку если не путаю в AMD-64 для регистров XOR RAX, RAX длина опкода с ксором длиннее чем присвоения. Подробнее можно прочитать в architectures-optimization-manual.pdf, правда там уже давно исключены ряд старых архитектур. Но можно найти старые версии этого документа, если есть желания. https://www.intel.com/content/dam/ww...ion-manual.pdf
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
Привет, Pavia
специально собрал программку Код:
Последний раз редактировалось Mikl___; 14.07.2017 в 08:58. |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 750
|
![]()
- какое доказательство? Только из-за того в move одни нули, если там, к примеру, идет число 1 в качестве 2-ого операнда? Наберусь смелости и попробую оспорить тот факт, что эти команды выполняются с одинаковой скоростью, команда mov занимает больше памяти, но я хочу поспорить и утверждаю, что они обе(mov и xor) выполнятся одновременно за 1 такт. Попробуйте оспорить обратное. Учтите, что процессор современный, т.к. динозаврические процессоры уже не применяются давным-давно.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Последний раз редактировалось Cuprum5; 14.07.2017 в 11:25. |
![]() |
![]() |
![]() |
#8 | ||
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
Cuprum5,
что-то я не пойму Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#9 | |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 296
|
![]() Цитата:
Когда это mov влиял на флаги? И в каких командах, начиная с Pentium'а отменились флаги?
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с ESI Juli@!Помогите пожалуйста!!!! | Black box | Помощь студентам | 0 | 21.01.2014 16:13 |
почему здесь MOV 00000 00000001 все нули,а на конце 1? и так с каждой. | VasyaSam | Visual C++ | 5 | 07.01.2014 19:56 |
PDP 11 - команда пересылки mov 27 27. почему это фатальная ошибка? | 13xXx13 | Помощь студентам | 0 | 15.01.2012 23:34 |
регистры SI и ESI | andygood | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 14.04.2011 13:48 |
ES -> ESI | Slamdunk1992 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 04.01.2011 23:40 |