(9).产生局部变量:int c = 0; (mov)
(总结上面步骤)局部变量(上面的a、b、c)的创建过程:
- 为这次函数调用创建函数栈帧 -- (1)~(6)
- 在函数栈帧中找到空间把局部变量放进去 --(7)~(9)
(10).调用函数:传参(mov)
(11).调用函数:传参(push)
(12).调用函数:传参(mov)
(13).调用函数:传参(push)
(14).call:调用函数(进入Add()函数)
网络异常,图片无法展示
|
(15).进入Add()函数后:
(当前开辟的空间情况:)
(16).Add()函数 的 push:
(17).Add()函数 的 mov:
(18).Add()函数 的 sub:
(19).Add()函数 的 连续三次push:
(20).Add()函数 的 lea(加载有效地址) --> mov --> mov --> rep stos:
网络异常,图片无法展示
|
(21).Add()函数中产生局部变量:int z = 0; (mov)
网络异常,图片无法展示
|
22).Add()函数中进行计算:z = x + y;
形参的产生和使用:
形参是对实参的临时拷贝:形参是调用的main函数中对变量的拷贝,即下图 ecx 和 eax所以改变形参,改变的也只是 ecx 和 eax ,并不会改变main函数中的实参
压栈时:先压的b’,所以在a‘下面,所以传参是先传的形参y,再传的形参x
形参的使用:通过指针的偏移量找到形参
网络异常,图片无法展示
|
(23).Add()函数计算后进行返回:return z;
网络异常,图片无法展示
|
(24).Add()函数调用完后销毁空间返回main函数:pop -- 出栈(弹出栈顶元素);
网络异常,图片无法展示
|
(25).Add()函数调用完后销毁空间返回main函数:ret -- call函数调用完后,返回main函数call的下一条指令(之前留的地址会出栈)
网络异常,图片无法展示
|
(26).main函数:销毁形参
网络异常,图片无法展示
|
(27).main函数:使用Add函数的返回值
网络异常,图片无法展示
|