- В сборке, должны ли вы создавать резервные регистры перед вызовом функции стандартной библиотеки C?
- Предоставляет ли Стандартная библиотека, что все ее функции резервируют регистры вызывающего абонента и восстанавливают их в конце?
- Где я могу найти официальную информацию по этому вопросу?
ответ
Это специфичная платформа, обычно вам не нужно специально сохранять и восстанавливать регистры на сайте вызова, обычно это делает вызываемый. Вам просто нужно следовать соглашению о связях для вашей конкретной платформы. C-библиотека не является государственной, не рекомендуется просто вызывать некоторые функции без инициализации библиотеки, как это делается в типичном программном объекте c, который содержит main().
Я думаю, что здесь применяются только призывные соглашения. http://en.wikipedia.org/wiki/X86_calling_conventions
Стандартная библиотека C не гарантирует, что это функции резервных регистров для вызывающего. Это зависит от вызывающих конвенций и от того, как он обрабатывается компилятором.
Предположим, что функция C ничего не знает о регистрах.
Вы найдете, какое соглашение вызова использует функция, формирует декларацию/подпись функции. Значение по умолчанию должно быть cdecl.
Это вопрос, специфичный для платформы, а не только вопрос, связанный с оборудованием. Стандартная библиотека C предназначена для вызова из C-программы, где вызовы (обычно) обрабатываются во время компиляции, и для вас выполняются соответствующие операции с регистром и стеком.
Обратитесь к руководству ABI для конкретной платформы, чтобы определить, как вызвать внешнюю функцию.
Как найти руководство ABI для моей платформы? (помиловать невежество). –
Это зависит от того, на какой платформе вы работаете? Windows 32-бит? 64-битный? Mac OS X 32-бит? 64-битный? Особый вкус Linux? MS-DOS? –
@LeifEricson http://google.com/ –
Я не понимал, что вы пытались сказать. –
вот немного редактирования .. – Ivarpoiss