Задать вопрос

Как передать нескольких параметров из Си в функцию на ассемблере?

Больше интересно не как передать несколько параметров а какими средствами получить в функции на assembler? Вот такой прототип функции int func(int*,int,char); первый параметр, массив типа инт я получаю через %ebx и могу возвратить значение из функции через %eax, а как быть с остальными аргументами следующими за первым параметром в функции, через какие регистры? И как получить доступ к глобальным переменным Сишной программы?
  • Вопрос задан
  • 1368 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега C
Седой и строгий
Для архитектуры AMD64 в Linux применяется System V AMD64 ABI:

Первые 6 целых числе или указателей передаются в регистрах RDI, RSI, RDX, RCX, R8, R9, а числа с плавающей точкой в регистрах XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6 и XMM7. Если параметров больше, то дополнительные передаются через стек. Целые числа до 64-бит возвращаются в регистре RAX, а большего размера в паре регистров RAX и RDX. Числа с плавающей точкой подобным же образов возвращаются в регистрах XMM0 и XMM1.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Первые несколько параметров передаются через регистры, остальное через стек.
https://msdn.microsoft.com/ru-ru/library/zthk2dkh.aspx
В Си есть стандарты передачи, но у себя в ассемблеры вы вольны изгаляться как вам угодно.
https://msdn.microsoft.com/ru-ru/library/zkwh89ks.aspx
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы