过程
过程的调用底层实现上是用栈结构,当过程p调用过程q时,我们先将p入栈,再将q入栈,q执行结束之后将q出栈,然后在将p出栈。调用不同的过程,实质上修改的是程序计数器(PC,从高地址向低地址增长)的值,从底层汇编上看,采用的是call命令。
-
转移控制
当过程p调用过程q,q执行结束之后如何继续执行p之后的机器指令,我们称之为转移控制。实现原理是在p执行call汇编调用q时候,我们首先将call指令的下一条指令入栈,也就是图中的返回地址。当q执行结束之后我们就可以将返回地址弹出,继续执行call的下一条指令
-
数据传送
在过程调用的过程中,必然涉及到的一个操作是参数的传递我们称之为数据传送,在底层实现中,我们采用寄存器的方式进行参数的传递。当传送的参数n<6时,我们将参数1-6分别复制到对应的寄存器中,当n>6时,我们将7-n的参数压入栈中,参数到位之后,程序就能执行call指令调用过程Q,新的过程Q可以通过读取寄存器来读取参数。我们又是如何读取栈中的参数呢?按照规定,在栈中的参数必须是8的整数倍对齐,这样我们就使得每一个参数对应于栈中的一行,我们通过对栈顶指针sp+8,sp+16来分别读取不同地址中的不同参数
-
寄存器中的局部存储
当P调用Q时,如何保证Q运行结束寄存器中还是P的内容呢?我们在P调用Q的时候,Q会将此刻P各个寄存器中的值存起来,当返回P时,我们再将存起来的值写入寄存器