2012-06-04 2 views
0
  • В сборке, должны ли вы создавать резервные регистры перед вызовом функции стандартной библиотеки C?
  • Предоставляет ли Стандартная библиотека, что все ее функции резервируют регистры вызывающего абонента и восстанавливают их в конце?
  • Где я могу найти официальную информацию по этому вопросу?

ответ

2

Это специфичная платформа, обычно вам не нужно специально сохранять и восстанавливать регистры на сайте вызова, обычно это делает вызываемый. Вам просто нужно следовать соглашению о связях для вашей конкретной платформы. C-библиотека не является государственной, не рекомендуется просто вызывать некоторые функции без инициализации библиотеки, как это делается в типичном программном объекте c, который содержит main().

3

Я думаю, что здесь применяются только призывные соглашения. http://en.wikipedia.org/wiki/X86_calling_conventions

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

Предположим, что функция C ничего не знает о регистрах.

Вы найдете, какое соглашение вызова использует функция, формирует декларацию/подпись функции. Значение по умолчанию должно быть cdecl.

+0

Я не понимал, что вы пытались сказать. –

+0

вот немного редактирования .. – Ivarpoiss

2

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

Обратитесь к руководству ABI для конкретной платформы, чтобы определить, как вызвать внешнюю функцию.

+0

Как найти руководство ABI для моей платформы? (помиловать невежество). –

+0

Это зависит от того, на какой платформе вы работаете? Windows 32-бит? 64-битный? Mac OS X 32-бит? 64-битный? Особый вкус Linux? MS-DOS? –

+0

@LeifEricson http://google.com/ –

 Смежные вопросы

  • Нет связанных вопросов^_^