169 похожих чатов

Добрый день. Прошу не кидаться помидорами, но напомните, почему все

обнуляют регистры XOR-ами, а в Майкрософте принято применять SUB?

8 ответов

3 просмотра

О чём речь в случае с Майкрософтом? Они там пишут на С и С++. И в Майкрофосте вполне тоже используется XOR в библиотеках. А всё потому что на современных процессорах, XOR оптимизируется в быстрое переименование регистра. Процессор находит пустой скрытый регистр и использует его в дальнейших операциях (Register renaming). Таким образом никакой операции по-сути нет, это равносильно NOP. На более старых используют mov r, 0

В каком майкрософте?

CLFLUSH 🇷🇺 rdseed
О чём речь в случае с Майкрософтом? Они там пишут ...

приведи прмер. как то непонятно про переименование

Aiwan \ (•◡•) / _bot
приведи прмер. как то непонятно про переименование

У процессора есть много скрытых регистров для устранения ожидания значений регистров между инструкциями (ложная зависимость). Например: mov eax, dword[SOME_ADDR] add eax, dword[esi+SOME_OFFSET_VALUE] mov dword[SOME_ADDR], eax mov eax, dword[SOME_ADDR+0xF] add eax, dword[esi+SOME_OFFSET_VALUE+0x4] mov dword[SOME_ADDR+0xF], eax В данном случае старый процессор не сможет выполнить инструкции одновременно, поскольку EAX зависим друг от друга. Но на новых процессорах, он может определить такую ложную зависимость, и переименовать 3 последних используемых регистра, которые не зависят от первых 3-х. Допустим это будет EBX, хотя там свои названия регистров. mov ebx, dword[SOME_ADDR+0xF] add ebx, dword[esi+SOME_OFFSET_VALUE+0x4] mov dword[SOME_ADDR+0xF], ebx В случае с XOR регистра с самим собой, то регистр будет переназначен на этапе выделения, и изначально будет нулём, без каких-либо операций. Кстати, я слегка ошибся, на самом деле с SUB и остальными инструкциями будет точно также, тут уже дело в размере. Другие примеры и описание: https://en.wikipedia.org/wiki/Register_renaming

CLFLUSH 🇷🇺 rdseed
У процессора есть много скрытых регистров для устр...

то есть все оптимизации под конвейер теперь можно сказать ничего не дают?

Mixail Frolov
то есть все оптимизации под конвейер теперь можно ...

Почему? Дают. Просто это определяется первее конвейера

CLFLUSH 🇷🇺 rdseed
О чём речь в случае с Майкрософтом? Они там пишут ...

а может там просто выделенный нулевой регистр?

disba1ancer
а может там просто выделенный нулевой регистр?

Ну это же тоже самое, только чуть хуже. С отдельными быстрыми скрытыми регистрами, можно делать как отдельный нулевой регистр, так и со значениями, вроде временных регистров. А если просто нулевой регистр будет — в него ничего не поместить

Похожие вопросы

Обсуждают сегодня

тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
читать файл максимально быстро? странный вопрос))
zamtmn
53
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
значить например он учился в СДУ то получается он особенный?)
Asets Serikov
11
А кто такой мужчина в твоем понимании Азиз?
who?です 🐈
11
Карта сайта