第三章 过程

过程

             过程的调用底层实现上是用栈结构,当过程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时,我们再将存起来的值写入寄存器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值