Условные обозначения для функций вариации описаны в MIPS ELF ABI , стр. 3-46.В основном, когда вызываемая функция является переменной (ее объявленный список аргументов заканчивается на '...
'), тогда компилятор добавляет некоторый код, который записывает первые аргументы (переданные в регистрах) в стек.Кадр стека всегда включает некоторое пространство для первых четырех аргументов (точнее, для четырех слов, которые передаются в регистрах от $4
до $7
).Таким образом, вызывающей стороне не нужно знать, была ли функция переменной или нет (за исключением, возможно, аргументов с плавающей запятой; в любом случае, лучше, чтобы и вызывающая сторона, и вызываемая сторона видели и использовали один и тот же прототип).
Если вы скомпилируете функцию с переменным числом C и посмотрите на созданную сборку, в начале функций вы увидите строки типа:
sw $5,52($sp)
sw $6,56($sp)
sw $7,60($sp)
, которые соответствуют этому процессу аргумент в стек.