13. الحلقات: تكرار العمل
اربط LOOP بـRETURN وتعامل صحيحًا مع صفر تكرارات.
1. توقّع وتتبّع
قبل تشغيل برنامج التجربة، توقّع مخرجاته وتتبّع أول ثلاث تعليمات تُنفّذ. راقب السجلات أو الرايات أو الذاكرة ذات الصلة حسب الحاجة. ثم نفّذ البرنامج خطوةً خطوة للمقارنة.
LOAD 8 LOOP 4 PRINT RETURN HALT
أضف المدخلات إلى الطابور: لا يوجد
هيّئ الذاكرة: جميع البايتات صفر في البداية
إجابات توقّع التجربة
المخرجات: 8, 8, 8, 8
| التعليمة | PC قبل | PC بعد | R0 قبل | R0 بعد | الحالة ذات الصلة | المخرجات |
|---|---|---|---|---|---|---|
| LOAD | 0 | 1 | 0 | 8 | {"registers":[8,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | لا يوجد |
| LOOP | 1 | 2 | 8 | 8 | {"registers":[8,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[{"start":1,"end":3,"remaining":4,"callDepth":0}],"memoryReads":[],"memoryWrites":[]} | لا يوجد |
| 2 | 3 | 8 | 8 | {"registers":[8,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[{"start":1,"end":3,"remaining":4,"callDepth":0}],"memoryReads":[],"memoryWrites":[]} | 8 |
2. ابنِ وافحص
اقرأ عدد تكرارات من 0 إلى 5. اطبع 8 بهذا العدد من المرات بالضبط، ثم توقّف.
أنواع التعليمات المطلوبة: INPUT, LOOP, PRINT, RETURN
مثال لحل التحدّي
INPUT COPY R0 R1 LOAD 8 LOOP R1 PRINT RETURN HALT
حالات الفاحص الفعلية
الحالة 1
- المدخلات
0- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
لا يوجد
الحالة 2
- المدخلات
1- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
8
الحالة 3
- المدخلات
4- الذاكرة الابتدائية
جميع البايتات صفر في البداية- المخرجات المتوقعة
8, 8, 8, 8
3. اشرح الآلة
كم مرةً تنفّذ LOOP 0 جسمها؟
ملاحظة الاستدلال والتعليم
صفرًا؛ تتجاوز الجسم وRETURN المقابلة. يولّد العدد السالب خطأً بدلًا من ذلك.