السلام عليكم
نعلم جميعا ان الـ stack frame يتم فتحه في بداية procedure ثم يتم اغلاقه ...
push EBP mov EBP,ESP .... mov ESP,EBP pop EBP
اولا اريد توضيحا لفائدة EBP اي ما هي القيم التي تخزن فيه.
ثانيا ، لم لا يتم استخدام الصيغة التالية المكافئة
push esp pop esp
لانه كما تلاحظون من الصيغة الاولى اننا وضعنا محتويات esp في ebp وبعد تنفيذنا للـ procedure
لم يحصل اي تغيير على ebp بدليل اننا قمنا بنقل القيمة المخنة فيه (هي بالاصل قيمة esp) الى esp
اي باختصار، ebp لا يتغير...لذا لا حاجة للاقتراب منه...بدلا من ذلك نقوم بتخزين قيمة esp في الـ stack ثم نعيدها كما كانت بعد ان ننتهي...
هل هذا صحيح ام لا؟