Я пишу простую графическую программу на ассемблере для учебных целей; для этого я намеревался использовать либо OpenGL, либо SDL. Я пытаюсь вызвать функцию OpenGL/SDL из сборки.
Проблема в том, что в отличие от многих учебных пособий по сборке и OpenGL/SDL, которые я нашел в Интернете, OpenGL/SDL на моей машине, по-видимому, не использует соглашение о вызовах C. Я написал простую программу на C, скомпилировал ее в сборку (используя ключ -S), и, по-видимому, код сборки, сгенерированный GCC, вызывает функции OpenGL/SDL, передавая параметры в регистры, а не помещая их в стек.
Теперь вопрос в том, как мне определить, как передавать аргументы этим функциям OpenGL/SDL? То есть, как мне выяснить, какой аргумент каким регистрам соответствует?
Очевидно, поскольку GCC может компилировать код C для вызова OpenGL/SDL, поэтому должен быть способ выяснить соответствие между аргументами функции и регистрами. В соглашении о вызовах C правило простое, помещать параметры назад и возвращать значение в eax/rax, я могу просто прочитать их документацию по C и легко понять, как передавать параметры. Но как насчет этих?
Есть ли способ вызвать OpenGL/SDL, используя соглашение о вызовах C?
Кстати, я использую yasm с gcc/ld в качестве компоновщика на Gentoo Linux amd64.