Okay, now that you have the basic ideas of function call semantics, let us see them in action. We have three functions here. My function, f and main. As you have learned, we start execution of a program inside of main. We've drawn a frame for main and are ready to begin executing its first statement which declares the variable a. So we create its box inside of the frame for main. Next, we're going to set a equal to the value of the function call, myFunction of 3, 7. To evaluate this expression, we need to create a frame for the function that we are calling, in this case, myFunction. This will hold the parameters and variables of myFunction. Next, we pass the parameters to myFunction. We create a box for each parameter with the names coming from the functional declaration x and y. We initialize these by copying in the values of the expressions that were passed, here, 3 and 7. Next, we need to note where to return when we finish executing myFunction. This location in the code is named the call site, the place where the function was called. We'll note it with marker 1 in the code, and put the same marker in the corner of the frame. Finally, we move the execution arrow into myFunction, and start executing code there. Here, we declare and initialize z, evaluating the expression, 2 times x-y. The values for x and y come from the frame for myFunction, 3 and 7 respectively, so z will be negative 1. Now, we have reached a return statement. Return statements tell us to leave the current function returning to the call site noted in the frame. They also tell us the value to return to the caller. The first thing we need to do is evaluate this expression to obtain the return value. Here, the expression is z times x, so we evaluate negative 1 times 3 and get negative 3. Next, find where we should return. This is the call site we noted in the frame. Then we copy the return value back to the call site. The function call evaluates to this return value. We move the execution arrow back to the call site, and destroy the frame for the function we just returned from. Now, we are back in main. The call to myFunction evaluated to negative 3, so this line behaves like a gets negative 3. We finished that assignment putting negative 3 in a's box. Our next line again has a variable declaration and a function call. We make a box for b, and go through the same process to call f. We make a frame for f, and pass parameters. This time, there's one parameter in whose value is a times a which is 9. We note where to return and begin executing code inside of f. Our next statement is a return statement, but the expression involves a function call. So we have to evaluate that call before anything else. We start with a frame and past parameters. x gets the value of n which is 9, and y gets the value of n + 1 which is 10. We note the call site. We use two this time since we are already using one somewhere else, and move the execution arrow to the start of myFunction, and start executing code there. We declare Z and initialize it to 8. Now, we are ready to return from myFunction. We evaluate z times x which is 72. Then we find that the call site noted in the frame and copy the return value there. Finally, we move the execution back to the call site destroying the frame from myFunction. Now, we pick up were we left off an f using 72 for the value of the call to myFunction. We evaluate 3 + 72 to get 75. Since we are evaluating the return statement, this is the return value of f, so we find the call site and copy the return value there. Then we return to that call site destroying the frame for f. Now, we can finish the initialization of b, b gets 75. Lastly, we reached the return statement from main. When we return from main, the program exits so we are done.