Эффективная ссылка на массив C с использованием встроенной сборки - PullRequest
0 голосов
/ 16 марта 2012

Использование Windows XP, gcc.

У меня есть проект C ++ с некоторым встроенным ассемблерным кодом. Код ассемблера должен ссылаться на массив C. Потому что я использую встроенную сборку. Я должен передать указатель на массив в один из регистров. К сожалению, это лишает меня регистра, который мне нужен для некоторых сложных вычислений.

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

Ответы [ 2 ]

1 голос
/ 16 марта 2012

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

Вы не сказали, какой компилятор вы используете.Оператор asm () в GCC очень мощный.Обычно вы можете написать asm-оператор, который ссылается на ваши локальные или глобальные переменные по имени, и позволить компилятору выбрать регистр (ы).

0 голосов
/ 16 марта 2012

Обычно вы используете регистры esi или edi для хранения подобной информации, поэтому регистры, которые вообще не участвуют в вычислениях. (если вы работаете на x86)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...