系统调用如何知道包装函数将参数放在哪里?

我试图在Linux(RedHat Enterprise 8)中实现一个系统调用,我对它的工作方式有点困惑。 据我所知,我实现了一个用户模式的包装器,它把系统调用号码放在eax和ebx,ecx,edx等参数中,然后调用int 0x80,调用相应的系统调用。 我的问题是,由于一个系统调用像一个常规的C函数一样写,它怎么知道哪些寄存器包含什么参数? 这是一个惯例,还是有一个机制,如果有的话,它是如何做的呢?

编辑:这是一项家庭作业。 我知道有系统调用macros可以为我做这个东西。

从Linux Journal文章,第2页的底部

由于系统调用接口是唯一的寄存器参数,因此最多可以使用六个参数进行单个系统调用。 %eax是系统调用号码; %ebx,%ecx,%edx,%esi,%edi和%ebp是用作param0-5的六个通用寄存器; 而且%esp不能被使用,因为它在进入环0(即内核模式)时被内核覆盖。

你的c代码可能看起来像是在进行一个系统调用,但实际上是在libc中调用一个函数。 该函数确保所有参数都在正确的寄存器中,然后执行中断。