人月神话的思维专栏 2018-02-17
push ebp ; 提升堆栈 mov ebp,esp sub esp,0CCh ------------------------------------------ push ebx ; 保留现场,函数在执行的时候会用到一些寄存器,但这些寄存器中 push esi ; 值很可能会被程序用到,所以要先存储到内存中 push edi push ecx ------------------------------------------ lea edi,[ebp-0CCh] ; 向分配的空间填充数据 mov ecx,33h mov eax,0CCCCCCCCh rep stos dword ptr es:[edi] ---------------------------------- pop ecx ; 函数实际实现的功能 mov dword ptr [this],ecx mov eax,dword ptr [this] mov dword ptr [eax+4],1 mov eax,dword ptr [nID] push eax push offset string "\r\nID:%d Who is your God? I am!\r\n"... (0EC6E94h) call _printf (0E33D73h) add esp,8 ---------------------------------------- pop edi ; 恢复现场,将之前保留的寄存器的值恢复 pop esi pop ebx ----------------------------------------- add esp,0CCh ; 堆栈平衡 cmp ebp,esp call __RTC_CheckEsp (0E32356h) mov esp,ebp ; 降低堆栈 pop ebp ; 恢复栈底 ret 4 ; 函数执行完毕,返回到调用处,等同于pop eip