Обычно (некоторые компиляторы делают это иначе, как указано) для обычных вызовов функций они передаются в стек. Обычно это серия команд push, которые просто помещают данные в стек.
В особых случаях, таких как системные вызовы, параметры передаются через инструкции по сборке и регистры. В аппаратных случаях они передаются через регистры или даже определенные сигналы прерывания, которые, следовательно, записываются в регистры.
В архитектурах с большим количеством регистров они обычно передаются через регистры, такие как некоторые RISC и 64-битные архитектуры.