19. عمليات المكدّس: الأخير دخولًا هو الأول خروجًا
احفظ القيم في مكدّس البيانات واسترجعها بترتيب معكوس.
فتح هذا الدرس →
1. توقّع وتتبّع
قبل تشغيل برنامج التجربة، توقّع مخرجاته وتتبّع أول ثلاث تعليمات تُنفّذ. راقب السجلات أو الرايات أو الذاكرة ذات الصلة حسب الحاجة. ثم نفّذ البرنامج خطوةً خطوة للمقارنة.
LOAD 11
PUSH
LOAD 22
PUSH
POP
PRINT
POP
PRINT
HALT
أضف المدخلات إلى الطابور: لا يوجد
هيّئ الذاكرة: جميع البايتات صفر في البداية
إجابات توقّع التجربة
المخرجات: 22, 11
2. ابنِ وافحص
اقرأ عددين صحيحين، واحفظ كليهما في مكدّس البيانات، ثم اطبعهما بترتيب معكوس. استخدم PUSH وPOP بدل قيم ثابتة.
أنواع التعليمات المطلوبة: INPUT, PUSH, POP
مثال لحل التحدّي
INPUT
PUSH
INPUT
PUSH
POP
PRINT
POP
PRINT
HALT
حالات الفاحص الفعلية
الحالة 1
- المدخلات
3, 8- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
8, 3
الحالة 2
- المدخلات
-4, 0- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
0, -4
الحالة 3
- المدخلات
9, 9- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
9, 9
3. اشرح الآلة
لماذا تُطبع القيمة المقدّمة الثانية أولًا؟
ملاحظة الاستدلال والتعليم
تتّبع PUSH وPOP ترتيب الأخير دخولًا والأول خروجًا؛ مع المدخلين 3،8 تكون المخرجات 8،3؛ وأطر الاستدعاء ليست بيانات.
20. استدعاء برنامج فرعي
أعد استخدام الشيفرة وعُد إلى التعليمة التالية لـCALL.
فتح هذا الدرس →
1. توقّع وتتبّع
قبل تشغيل برنامج التجربة، توقّع مخرجاته وتتبّع أول ثلاث تعليمات تُنفّذ. راقب السجلات أو الرايات أو الذاكرة ذات الصلة حسب الحاجة. ثم نفّذ البرنامج خطوةً خطوة للمقارنة.
LOAD 3
CALL square
PRINT
LOAD 4
CALL square
PRINT
HALT
square: MUL R0
RETURN
أضف المدخلات إلى الطابور: لا يوجد
هيّئ الذاكرة: جميع البايتات صفر في البداية
إجابات توقّع التجربة
المخرجات: 9, 16
2. ابنِ وافحص
اقرأ عددين صحيحين. استدعِ برنامج التربيع الفرعي نفسه لكل منهما واطبع المربّعين بترتيب الإدخال.
أنواع التعليمات المطلوبة: INPUT, CALL, MUL, RETURN
مثال لحل التحدّي
INPUT
CALL square
PRINT
INPUT
CALL square
PRINT
HALT
square: MUL R0
RETURN
حالات الفاحص الفعلية
الحالة 1
- المدخلات
3, 4- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
9, 16
الحالة 2
- المدخلات
-2, 5- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
4, 25
الحالة 3
- المدخلات
0, 8- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
0, 64
3. اشرح الآلة
لماذا يعود استدعاءان للشيفرة نفسها إلى موضعين مختلفين؟
ملاحظة الاستدلال والتعليم
تحفظ كل CALL قيمة PC+1 الخاصة بها في إطار استدعاء منفصل؛ جسم الدالة مشترك، لكن نقطة متابعة المستدعي مختلفة.
21. الحفاظ على حالة المستدعي
استخدم اتفاق حفظ واستعادة عندما تحتاج الدالة مساحةً مؤقّتة.
فتح هذا الدرس →
1. توقّع وتتبّع
قبل تشغيل برنامج التجربة، توقّع مخرجاته وتتبّع أول ثلاث تعليمات تُنفّذ. راقب السجلات أو الرايات أو الذاكرة ذات الصلة حسب الحاجة. ثم نفّذ البرنامج خطوةً خطوة للمقارنة.
LOAD 1 R1
LOOP 3
LOAD R1
CALL double
PRINT
LOAD R1
ADD 1
COPY R0 R1
RETURN
HALT
double: MUL 2
RETURN
أضف المدخلات إلى الطابور: لا يوجد
هيّئ الذاكرة: جميع البايتات صفر في البداية
إجابات توقّع التجربة
المخرجات: 2, 4, 6
2. ابنِ وافحص
اقرأ قيمة محفوظة إلى R1، ثم وسيطًا لدالة. استدعِ دالة مساعدة تعيد الوسيط + 1 وتستخدم R1 مؤقّتًا للعمل. اطبع النتيجة ثم القيمة الأولى المحفوظة. استخدم PUSH وPOP للحفاظ على R1.
أنواع التعليمات المطلوبة: INPUT, PUSH, POP, CALL, RETURN
مثال لحل التحدّي
INPUT
COPY R0 R1
INPUT
CALL helper
PRINT
LOAD R1
PRINT
HALT
helper: COPY R0 R2
LOAD R1
PUSH
LOAD 99 R1
LOAD R2
ADD 1
COPY R0 R2
POP
COPY R0 R1
LOAD R2
RETURN
حالات الفاحص الفعلية
الحالة 1
- المدخلات
12, 3- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
4, 12- السجلات النهائية المتوقعة
R1: 12
الحالة 2
- المدخلات
-8, 0- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
1, -8- السجلات النهائية المتوقعة
R1: -8
الحالة 3
- المدخلات
7, -5- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
-4, 7- السجلات النهائية المتوقعة
R1: 7
3. اشرح الآلة
أي حالة محفوظة تخصّ المستدعي بدل نتيجة الدالة؟
ملاحظة الاستدلال والتعليم
يحدّد اتفاق الحفظ السجل R1؛ احفظه واستعده مع إعادة النتيجة عبر R0 وإبقاء أطر الاستدعاء المنفصلة سليمة.