The pass by register I guess is used to call a subroutine like thing I guess, like GOSUB in BASIC and pascal subroutine call.
Am I right? If you can clarify it will be great.
I think we're using the different terminology of different compilers and languages to describe the same thing. There is only one operation being discussed here, whether we call it a procedure, subroutine, function, software interrupt, call, global function, library function etc. They all use the very special technique of placing the Instruction Pointer to the code being executed onto the stack and all are used in conjunction with a set of Return instructions which take a value from the stack and put it into the Instruction Pointer.
Which ever language you use and whichever terminology you use, that's what they all do.
Passing parameters is something else you do - it only appears that parameter passing is connected with procedures, subroutines etc because we do them at the same time (and if using the stack we must do it in a very orderly and precise manner to ensure that the Instruction Pointer is POPed from the stack correctly). Actually, different compilers can, and do, pass parameters in different ways, though not with as much flexibility as the Assembly Coder or Machine Code writer!
I believe that the use of registers is the most efficient method for very simple functions (eg convert a single character from lower case to upper case) - to use the stack or an indirect pointer to the data simply wastes processing clock cycles. Conversely, using the stack is the most uniform manner of writing code that is consistent and adaptable, but sadly it can be the least efficient in processing time and for simple functions within the heavily used code of an OS or main loop of a small controller, can create conflicts with interrupt handling.
There are many challenges facing Compiler writers, and many of these are trade-offs such as speed vs consistency which is why heavily used code is frequently written at assembly level, to hone it down to the bare minimum of instruction cycles and using the most efficient technique for moving data for each circumstance.
Hope this helps