### A good answer might be:

Yes.

# Diagram

Those rules are complicated. In broad outline it works the same way as the previous chapter's stack-based linkage convention. The additional complications are due to implementing variables as locations on the stack.

Here is a picture. It shows the sections of subroutine linkage. The basic tasks of each section are:

> Subroutine Call: Push any "T" registers that contain values that are needed. Put arguments in "A" registers. `jal` to the subroutine.

> Prolog: Push $ra and the caller's $fp. Push any "S" register the subroutine will alter. Initialize the subroutine's $fp and $sp.

> Body: Normal code, except it must follow these conventions if it calls another subroutine. "T" and "A" registers can be used freely, as can any "S" registers that were saved in the prolog. Variables on the stack are accessed using `disp($fp)`.

> Epilog: Put return values in "V" registers. Reset $sp. Pop any "S" registers. Pop the caller's $fp and $ra. `jr $ra` back to the caller.

> Return: Pop any previously pushed "T" registers.

### QUESTION 7:

Is there a limit to how many variables a subroutine may have?