Die Parameter müssen ja so oder so auf den Stack (außer den ersten drei, die Platz in EAX, EDX und ECX haben, wenn ich richtig liege
). Normalerweise erledigt das Compiler, aber wenn der Compiler die Parameter nicht auf den Stack schieben kann, muss das der Programmierer tun. Und das geht AFAIK nur in Assembler. Also ist die einzige Möglichkeit wirklich, die Parameter auf den Stack zu schieben und dann die importierte Funktion aufzufrufen. So seh ich das.
Ich schätz mal, ein C/C++-Compiler macht das auch nicht anders.