Сборка PowerPC: как передать и вернуть несколько аргументов?

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

Какие регистры можно использовать для передачи аргументов подпрограмме? Я думаю, что это R3 к R12? Как вы передаете аргументы, когда у вас заканчиваются регистры? Могу ли я увидеть пример кода этого.

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

1 ответ

Решение

Если вы пишете на ассемблере, вы можете делать все, что захотите. Только когда вы хотите взаимодействовать с каким-то внешним кодом (может быть, библиотекой, может быть, системным вызовом), вам необходимо соблюдать соглашение о вызовах. Некоторые архитектуры имеют несколько различных ABI, поэтому вы должны быть осторожны.

Если я правильно помню, почти все используют одно и то же соглашение о вызовах для 32-битного PowerPC, поэтому в этом справочнике Apple должно быть все, что вам нужно знать. Как вы упоминаете, параметры обычно передаются в R3-R10, а возвращаемое значение помещается в R3. Этот урок, кажется, указывает на то же самое.

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