syscall (o sysenter) es mejor, es una instruccion especificamente creada para pasar rapidamente a modo Kernel. Los parametros dependen de la convencion de llamada y no de la instruccion en si misma (salvo rcx en syscall), por ejemplo Windows usa
stdcall, en 32 bits un registro (eax) indica el numero de servicio y otro (edx) indica el puntero a la pila con los parametros, en 64 bits usa registros tal como establece la
convencion para los parametros excepto para el primero (rcx) que usa (r10), esto se debe a que syscall guarda en rcx la instruccion a la que retornar. Por lo que puedo leer en Wikipedia Linux sigue la convencion de la
ABI de AMD64 (RDI, RSI, RDX, RCX, R8 and R9 + pila, asumo que ponen rcx en otro lado por logica).