帮忙看下这几段汇编
说实话这两天一直在搞函数调用时的栈帧结构问题,也看了不少资料对于这个问题总算有些理解了11: int func(int x,int y)12: {004015E0 push ebp // 保存调用者函数的栈帧底部地址 esp = esp-4004015E1 mov ebp,esp // 然后新的栈帧开始,起始位置就是esp,004015E3 sub esp,44h // 预留空间 esp = esp-44004015E6 push ebx // 连续压入三个寄存器,我就不大理解了,每个函数里都有这种固定格式004015E7 push esi // 变址寄存器 它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 没看出方便在哪里...004015E8 push edi // 变址寄存器004015E9 lea edi,[ebp-44h] // 保存这个有什么用?004015EC mov ecx,11h004015F1 mov eax,0CCCCCCCCh004015F6 rep stos dword ptr [edi] // 这句更猫腻了,看不懂13: int z(4);004015F8 mov dword ptr [ebp-4],4 // 将4 放入 ebp-4的地址中14: return 6;004015FF mov eax,6 //15: }|-------------| 22ff30| 3 | push 3 esp-4| 2 | push 2 esp-4| 返回地址 | push re-addr esp-4| EBP | push EBP esp-4 <<------这就记号---------------- <<------- mov %esp,%ebp --->> 新栈帧开始,新栈帧总是从原栈帧顶部位置开始,调用结束后就清栈,结果又变为调用函数的栈帧结构了| z | <<------- movl $0x4,-0x4(%ebp)恰好得到22ff1c| | |-------------| <<------- sub $0x10,%esp --->> ESP 22ff10