الدرس الثاني :
المخزن stack
· هو جزء من الذاكرة لتخزين أشياء مختلفة
· يتم التخزين باستخدام الأمر push
· يتم استدعاء القيمة المخزنة بالأمر pop
· إذا قمت بتخزين عدة قيم فأول قيمة يتم تخزينها هي آخر قيمة تسترد
يمكن التشبيه للقيم المخزنة بمجموعة أطباق عند وضعهم فوق بعضهم البعض
فان أول طبق يوضع أسفلهم و لكي نحصل عليه يجب ان نرفع ما فوقه أولا
[في لغة التجميع يمكن استخدام نفس الطبق عدة مرات]
مثال
Push ax معناها خزن محتوى المسجل ax في الذاكرة ...1 (الطبق الأول)
Mov ax, 1 ضع القيمة 1 داخل المسجل ax
Push ax معناها خزن محتوى المسجل ax في الذاكرة ...2(الطبق الثاني)
………..
………..
pop ax يتم استرداد القيمة 2 وهي في مثالنا الحالي =1
Pop ax يتم استرداد القيمة 1 و التي تم تخزينها أولا
الأمر mov
تطرقنا لهذا الامر في المثال السابق و هو يكافئ الأمر let لمن لديه فكرة عن لغة البيسك بالنسبة للغة التجميع فهي اختصار للفعل move بمعنى انقل او حرك لقيمة معينة الى داخل السجل و يأخذ احد هذه الأشكال
· Mov eax,00000001 انقل القيمة داخل المسجل eax
· Mov eax,ebx اجعل قيمة eax تكافئ قيمة ebx
· move ax,[ebx] اجعل قيمة eax تكافئ القيمة الموجودة بالعنوان المحفوظ داخل المسجل ebx
نلاحظ ان
· [ebx] تعني محتوى عنوان داخل المسجل و ليس المسجل نفسه
· الحرف e ببداية المسجلات لاننا نتعامل مع مسجلات 32 بت
· يمكن وضع عنوان للذاكرة بالمسجل و التعامل مع العنوان بعد ذلك عن طريق المسجل
· ما ينطبق على الامر mov ينطبق على باقي الاوامر من حيث التعامل مع القيم و محتويات المسجلات و محتويات العناوين المحفوظة بالمسجلات
الامر CMP
· الامر يعني قارن بين قيمتين
· يؤثر على الحالة Z للبيان FLAG
· Z تساوي 1 بمعنى ان الناتج من المقارنة =0 أي تساوي القيمتين
· عدا ذلك فان Z تساوي 0 دلالة على عدم تساوي القيمتين
· CMP EAX,5 قارن قيمة بمحتوى المسجل
· CMP EAX,ECX مقارنة محتوى مسجلين
· CMP EAX,[EBX] مقارنة محتوى مسجل بمحتوى عنوان
الامر JMP
· سأقول ببساطة انه يعني اذهب الى
· JMP ECX اذهب إلى ماذا ؟ سأخبرك سأفترض أن محتوى المسجل EAX هو XX هل تذكر الاوفست إذا فاعلم أن OFFSET=XX العبارة الان واضحة اذهب الى السطر XX
· JMP 018249 الأمر سهل مباشر اذهب الي السطر 018249
· الأمر يشبه GOTO بلغة البيسك