虚拟机指令集&栈与函数调用(下)
第一可以把代码的位置恢复到之前的状态第二可以把栈的状态恢复到调用之前的状态所以记录老的bp就是为了调用结束恢复用的然后再给栈 增加一些空间存局部变量 这里的局部变量只有一个ret然后执行 ret = a+b首先要把赋值的部分ret地址存下来等赋值完成之后 有个地方去装这个结果所以需要把这个地址拿出来由于它是第一个局部变量 那么就是栈基减1的位置所以通过LEA -1 把它的地址拿出来存到了所谓的a....
![虚拟机指令集&栈与函数调用(下)](https://ucc.alicdn.com/pic/developer-ecology/ac1eac7463804968a9bc15170c0dbe74.png)
虚拟机指令集&栈与函数调用(中)
add栈中保存了返回地址参数一般放在main栈的最底下 也可以定义在add栈里面main栈的栈基base point 即bp局部变量ret最后就是栈顶当add调用结束之后 直接回到bp位置所有的局部变量就不需要了然后把add栈中的bp放到main栈中的bp中去返回值给pc然后代码区就会有一个跳转这就是一个函数调用的过程通过一个后进先出的一个空间的抽象极大的简化不同的函数栈之间的内存的关系但不是一....
![虚拟机指令集&栈与函数调用(中)](https://ucc.alicdn.com/pic/developer-ecology/2ad0b1ec8e3a4852997c92da039d9f55.png)
虚拟机指令集&栈与函数调用(上)
指令集save&loadIMM全称load immidiatily立即加载数据到寄存器LEAload effective address加载地址LC/LI/SC/SIload char/load int:将char和int加载到寄存器save char/save int:将char和int从寄存器加载到内存PUSH将寄存器的数据推到栈顶stack peek举例ax是通用寄存器pc是代码区....
![虚拟机指令集&栈与函数调用(上)](https://ucc.alicdn.com/pic/developer-ecology/05c870fd85e84c9bb635ea50b806582c.png)
本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。