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