كيف طلع الناتج ممكن شرح حلو وبالخطوات
ممكن تشرحوا لي كيف طلع الناتج
ليااال كتب:كيف طلع الناتج ممكن شرح حلو وبالخطوات

1- نبدأ بتهيئة بعض المسجلات.
mov ax,2456 mov sp,32c0
2- قبل وعند تنفيذ الأمر push ax تكون حالة الـ stack كالظاهر في الصورة:
كما تلاحظين، تكون قيمة الـ stack pointer مساوية لـ 32C0h (وهي قيمة SP التي تم إسنادها) وعندما يتم إدخال قيمة جديدة تتناقص هذه القيمة بعدد البايتات التي تم إرسالها وهو 2 (طول السلسلة "2456") ويصبح المؤشر الجديد للـمكدس يشير إلى العنوان 32BE الذي سيحتوي على القيمة التي تم إدخالها (وهي قيمة AX) وتساوي "2456h".
3- تعليمة SHR تمثل الإزاحة إلى اليمين بمقدار x
shr ax, 1
تعني إزاحة القيمة "2456h" بمقدار 1 إلى اليمين وهذا يماثل تماماً قسمة 2456h على العدد حيث تلاحظين أن مقدار الإزاحة الذي تكلمت عنه x (وقيمته 1) يمثل الأس.
لذلك تكون الإزاحة بمقدار 1 تماثل القسمة على 2
الإزاحة بمقدار 2 تماثل القسمة على 4 ()
الإزاحة بمقدار 3 تماثل القسمة على 8 .. وهكذا.
بعد تنفيذ shr ax, 1 تصبح قيمة ax تساوي ناتج القسمة على 2 وهو 122Bh
4- عند تنفيذ الأمر
call 0114
يتم بشكل اوتوماتيكي دفع قيمة عنوان العودة إلى المكدس، حتى يتم استخدامها في الخروج من الإجرائية الجزئية التي يتم طلبها بالتعليمة CALL.
أما IP وهي اختصار Instruction Pointer فإن قيمتها تشير إلى التعليمة التالية التي يجب تنفيذها وتكون عنوان التعليمة الأولى الموجودة في الإجرائية الجزئية وهي عملية زيادة AX بمقدار 1 (inc ax) وعنوانها 0114 داخل المقطع نفسه.
5- (عند العنوان 0114 داخل الإجرائية الجزئية حيث يجب حل السؤال بالترتيب الذي يتم عليه التنفيذ)
يتم زيادة قيمة المسجل AX بمقدار 1 .. فتنتقل قيمة AX من 122bh إلى 122ch
ثم يتم الخروج من الإجرائية الجزئية باستدعاء التعليمة RET والتي تقوم بسحب (pop) القيمة الأخيرة من أعلى الـ stack والتي (تم دفعها كعنوان للعودة في المرحلة السابقة) ويتم تخصيصها للمسجل IP والذي يشير إلى التعليمة التالية اللازم تنفيذها وتصبح قيمة IP مساوية لـ 010ch
6- (عند العنوان 010ch بعد الخروج من الإجرائية الجزئية)
تقوم تعليمة pop ax بسحب آخر قيمة موجودة في المكدس وتخزنها في المسجل ax
إن آخر قيمة كانت في المكدس هي 2456h والتي تم دفعها في المرحلة 2.
تصبح قيمة ax بعد التنفيذ مساوية لـ 2456h
أما المكدس فعكس عملية PUSH يتم زيادة قيمته بمقدار عدد البايتات التي تم سحبها منه، أي 2، وتنتقل قيمته (والتي تمثل بشكل مجازي حجمه) من 32BEh إلى 32C0h وهي القيمة الافتراضية التي تم تهيئته بها في المرحلة 1
انتهى.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
مشكور اخوي الله يعطيك الف الف عافية