4.3 Calling and returning with a CISC architecture

There are actually architectures that require the instruction sequences previously mentioned to call subroutines and return from subroutines (and not using push and pop, either!). However, most CISC architectures, and many RISC architectures, have dedicated instructions to call subroutines and return from subroutines.

For the i386 architectures, the following instruction can be used to call a subroutine:

call f  
    

This single instruction saves the return address (the address of the instruction following call f) on the stack, then branches to f.

To return from a subroutine:

ret  
    

This instruction, in contrast, pops the return address and continues execution there.