1.两个重要的寄存器ebp与esp,这两个寄存器主要用来维护一段处理中的栈空间,这段栈空间的顶部地址(低地址)会放进esp寄存器中,底部地址(高地址)会放进ebp寄存器中。
2.个人对ebp,esp作用的理解,它们更像是两个准校点,以此用来寻找维护空间中的每一个地址单元,对每一个内存单元进行操作。
3.对内存单元的操作主要靠push(压栈),mov(后值赋值给前),lea(加载有效地址),pop(弹出栈顶)等指令。
4.在主函数运行时,内部将会不可避免的调用其他功能函数,此时edp和esp将会指向功能函数栈帧的栈底与栈顶,然而在跳转之前就会先把主函数栈帧的此“断点”处的内存单元位置进行记录,并且压入功能函数栈帧的栈顶,在功能函数的栈帧销毁时,ret指令将其弹出,并且返回其所记录的位置,继续运行主函数。
5.关于形参,功能函数调用之前,形参实际并没有分配空间,而且功能函数栈帧生成时,就会生成一块空间来复制实参的值,而且此生成的新空间实际上还是位于主函数栈帧之内,而后在功能函数栈帧生成后,会将新空间内的值再复制一份到功能函数栈帧空间内进行运算,运算完成之后,又会将结果复制给寄存器,如此,随着功能函数栈帧的销毁,其运算结果才能得到保留,(寄存器不属于栈,区别于栈内存,是另一种内存)供给主函数栈帧去使用。
最后,这些是小白关于学习了一些汇编的知识体会,可能有错漏,请指正,但不要直接开喷。
|