C зарегистрировать соглашения о вызовах - PullRequest
3 голосов
/ 06 мая 2011

Где я могу найти документацию о регистрах, которые сборка должна сохранять при вызове функции C?

Ответы [ 6 ]

4 голосов
/ 06 мая 2011

Это называется ABI (двоичный интерфейс приложения).Где ты это нашел?Зависит от вашей архитектуры и операционной системы.

Например: Google для ABI x86_64 linux, если вы хотите найти соглашения о вызовах для 64-битной системы Linux.

4 голосов
/ 06 мая 2011

То, что вы хотите, это двоичный интерфейс приложения C вашей системы. Google для "C ABI" и вашей архитектуры, и вы найдете это. Например, здесь - это единица для sparc, а здесь - соответствующий бит для AVR.

2 голосов
/ 06 мая 2011

Руководства по оптимизации Dr Agner Fogs содержат изящный список всех общих систем и соглашений компиляторов (ABI) для 32 и 64 бит.Они также содержат много другой полезной информации, вы можете получить их здесь: http://www.agner.org/optimize/

0 голосов
/ 07 мая 2011

Это в значительной степени зависит от архитектуры.Посмотрите объяснение Википедии для начинающих.

http://en.wikipedia.org/wiki/Calling_convention

0 голосов
/ 06 мая 2011
0 голосов
/ 06 мая 2011

Существует несколько соглашений о вызовах, но наиболее распространенным является CDECL . Аргументы помещаются в стек в порядке, описанном этой ссылкой, и «чистые» регистры, доступные вызываемому пользователю, - %eax, %ecx и %edx. Все остальное должно быть сохранено в стеке.

Но, как отмечали другие люди, это только одна из многих конвенций. Проверьте документацию для системы, для которой вы программируете.

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