registers, and parameters always in the stack, even if less or equal than than 4)?
In sprintf, and only in that function. If you need to use another function that requires a variable number of arguments, or more than 4 arguments (I can’t fathom why you would need such thing, but you never know), use the proper MIPS conventions (parameters in $ax registers have preference over parameters in stack, and parameters only in stack if 5 or more).