الجدولة والأنوية والأحداث · الدرس 27 من 30 · نحو 15 دقيقة
المقاطعات ومعالجات الأحداث
عالج حدثًا واستعد قيمة المهمة الأمامية التي قوطعت.
01 / اشرح
افهم الفكرة
المقاطعة حدث يحوّل مهمةً قيد التنفيذ مؤقّتًا إلى معالج أحداث. يجب على المعالج حفظ الحالة التي لا تزال الشيفرة المقاطعة تحتاجها، ثم إنجاز عمله واستئناف التنفيذ السابق. يسجّل مختبر الأنظمة تسليم الحدث والاستئناف بوضوح.
لا يحتوي المعالج ذو 25 تعليمة على تعليمة مقاطعة مخفية. يمثّل هذا التحدّي معالجًا باستخدام CALL وحفظ البيانات واستعادتها بالمكدّس. يجب أن تعود قيمة المهمة الأمامية إلى R0 بعد المعالج؛ وتحفظ بايتات الحدث في العنوانين 240 و241.
02 / جرّب
راقب ما يحدث
توقّع القيمة الأمامية المستعادة 17، ثم نتيجة الحدث 5. يكون المكدّس فارغًا بعد العودة.
STORE 4 240
LOAD 17
CALL handler
PRINT
LOAD [241]
PRINT
HALT
handler: PUSH
LOAD [240]
ADD 1
STORE 241
POP
RETURNاستخدم خطوة لاتّباع تعليمة واحدة في كل مرة. يمكنك تغيير المثال وإعادة تشغيله.
03 / التحدّي
اجعله يعمل
اقرأ عددًا صحيحًا للمهمة الأمامية ثم بايتًا لحدث. خزّن الحدث في العنوان 240. استدعِ معالجًا يكتب الحدث + 1 في ذاكرة البايتات 241 ويحافظ على R0 الأمامي باستخدام PUSH وPOP. اطبع القيمة الأمامية المستعادة ثم نتيجة الحدث المخزّنة.
يشغّل الفاحص البرنامج الحالي في محرّرك على آلة جديدة لكل حالة من حالات الاختبار الـ3. ويوفّر المدخلات والذاكرة المهيّأة بنفسه؛ لا تحدّد مخرجات المختبر الحالية ولا ذاكرته نتيجتك.
INPUT
COPY R0 R1
INPUT
STORE 240
LOAD R1
CALL handler
PRINT
LOAD [241]
PRINT
HALT
handler:
#
RETURNهل تحتاج إلى تلميح؟
نفّذ PUSH قبل تحميل الحدث وPOP بعد تخزين نتيجة المعالج.
اعرض حلًا محلولًا
اقرأ البرنامج، وتوقّع أثر كل تعليمة، ثم نفّذه خطوةً خطوة في المختبر.
INPUT
COPY R0 R1
INPUT
STORE 240
LOAD R1
CALL handler
PRINT
LOAD [241]
PRINT
HALT
handler: PUSH
LOAD [240]
ADD 1
STORE 241
POP
RETURNمختبر معالج الرموز التعبيرية
برنامج الرموز التعبيرية
اكتب LOAD أو ADD أو تعليمة أخرى ثم مسافة لإدراج الرمز. يشغّل Ctrl/⌘ + Enter أو يوقف مؤقتًا؛ ويوقف Escape مؤقتًا؛ ويزيد Ctrl/⌘ + ] الإزاحة. ينقل Tab التركيز. تستخدم الوسوم نقطتين رأسيتين. تستخدم القفزات عناوين تعليمات تبدأ من صفر.
خريطة التعليمات ونقاط التوقّف (0)
توقف نقاط التوقّف قبل التعليمة. يتجاوز تشغيل نقطة التوقّف الحالية مرةً واحدة عند الاستئناف؛ وتنفّذ خطوة التعليمة مباشرةً. يمسح تحرير المصدر نقاط التوقّف القديمة وحالة الآلة.
سجلات المعالج
- R0
- 0
- R1
- 0
- R2
- 0
- R3
- 0
- R4
- 0
- R5
- 0
- R6
- 0
- R7
- 0
المكدّسات وأطر الحلقات
SP = 255 − عمق البيانات − عمق الاستدعاءات. المكدّس منفصل عن الذاكرة.
مكدّس البيانات (من الأسفل إلى الأعلى)
فارغ
عناوين عودة الاستدعاءات (من الأسفل إلى الأعلى)
فارغ
أطر الحلقات
فارغ
المخرجات والمدخلات
نفّذ تعليمة PRINT لرؤية المخرجات.
المدخلات في الطابور: فارغ
الذاكرة · 256 بايت · 0 غير صفري
تعرض كل خلية العنوان:القيمة. R = قراءة في هذه الخطوة؛ W = كتابة في هذه الخطوة. اختر خليةً لفحصها أو تهيئتها قبل التنفيذ. استخدم الأسهم للتنقّل، وHome/End للصف، وCtrl/⌘ + Home/End للذاكرة كلها.
سجلّ التنفيذ · 0 عناصر
العناصر الأخيرة أدناه. افحص أي فهرس يبدأ من صفر لرؤية الحالة الكاملة المنفصلة قبل التنفيذ وبعده.
افحص تحدّيك
يمكنك إجراء هذا الفحص في أي وقت. يجب أن تنجح كل حالة لتسجيل الإنجاز.
يستخدم التقدّم localStorage فقط. يبقى في هذا المتصفّح ولا يُرسل إلى أي خادم.