IA32-x86 Использование регистров специального назначения в качестве регистров общего назначения

Я инициирую меня в программировании на ассемблере, я делаю некоторые алгоритмы, и количество регистров общего назначения для этого недостаточно

Есть ли способ использовать специальные регистры (eip, eflags) в качестве регистров общего назначения в asm?

Они нужны мне только для нескольких операций, но все общие регистры уже заняты, я не люблю хранить значения в памяти, которые могут снизить производительность алгоритма.

Является ли это возможным?

4 ответа

Краткий ответ: Нет. Эти регистры не предназначены для явной записи.

Вам придется либо переписать свой алгоритм, лучше распределить свои регистры, заняться интеллектуальным разливом / перезагрузкой регистров в память, чтобы минимизировать влияние на производительность, либо, если возможно, использовать регистры XMM для перемещения регистров INT в / из или выполнять цепочки команд все на стороне XMM. Другой вариант - использовать 64-битную версию для использования дополнительных доступных регистров.

Разумное повторное использование уже имеющихся у вас регистров общего назначения, вероятно, будет лучшим выбором. Тщательно продумайте свой алгоритм.

Повторное использование EIP невозможно, а использование EFLAGS для чего-то другого, хотя, возможно, возможно, просто имеет слишком много побочных эффектов, чтобы быть в целом полезным.

Лучше было бы на самом деле время вашего алгоритма с использованием памяти. Вы можете обнаружить, что из-за кэширования доступ не такой медленный, как вы могли подумать.

Другой вариант - использовать регистр математического сопроцессора как просто небольшой частный стек для хранения, но это также, вероятно, будет менее удовлетворительным, чем простое использование памяти.

Краткий ответ: нет.

Если вы запускаете программу, использование eip в качестве регистра общего назначения определенно невозможно, так как если вы "пишете" в eip, ваша программа перейдет к выполнению инструкций по этому адресу (примерно), что, вероятно, не будет работать... Что касается EFLAGS, он имеет ряд битов, которые либо зарезервированы, либо управляют различными вещами, которые вы не хотите изменять, то есть снова не будут работать как регистр общего назначения. Поскольку вы, похоже, намереваетесь не использовать память для сохранения значений, вы можете использовать esp и ebp (будьте осторожны, если вы вообще используете стек). Кроме этого, большинство регистров, которые, я думаю, вы используете, требуют уровня 0 для записи и повторения, очень вероятно, будут иметь негативные последствия, если вы будете использовать их в качестве регистров общего назначения.

Могут быть некоторые очень специальные регистры, специфичные для вашего процессора, но код не будет переносимым между процессорами, если вы будете их использовать.

Я помню, что я использовал регистр отладки от dr0 до dr3 для хранения данных. Но я не уверен, как быстро они будут использовать. Может быть, переименование регистра внутри ЦП (для создания микроопераций) позволит ему тоже работать.

Файл регистров - это небольшое хранилище, которое поддерживает только одну инструкцию и используется для промежуточных вычислений. И если вы хотите широко использовать регистры, это убьет цель иметь быстрое хранилище, такое как регистры.

С другой стороны, CACHE созданы для 2-го уровня иерархии памяти, которую вы хотели бы использовать. Следовательно, вам необходимо разрабатывать алгоритмы, которые в полной мере используют локальность данных, которую предпочитают эти кэши. Существуют отдельные кеши для инструкций, которые повторно используют инструкции, например, в циклах, которые реализованы очень эффективно.

Даже в этом случае, если кто-то хочет интенсивно использовать регистры, интеллектуальные компиляторы - еще один вариант, и в этом случае используются интеллектуальные методы распределения регистров. Недавний гибридный метод использует автономный алгоритм машинного обучения для создания эвристической функции (которая используется во время выполнения), которая определяет и переключается между различными методами распределения, которые будут работать лучше в свете поведения кода. Надеюсь, это помогло. С уважением

Другие вопросы по тегам