الدرس 5 من 8

المفكّك

هدف الدرس

من الأرقام إلى أسماء مقروءة

01

الشرح

قائمة الصفوف دقيقة لكنها أرقام. والمفكّك (disassembler) يحوّلها إلى أسماء يقرؤها الإنسان، فبدل (1, 72) ترى LOAD 0x48. وهذا بالضبط ما تفعله أدوات التحليل الكبيرة مع أوامر المعالج الحقيقي، لكن جدولها فيه مئات الأوامر.

تذكّر أوامر الآلة:

0x00 HALT      break
0x01 LOAD imm  acc = imm
0x02 ADD  imm  acc = (acc+imm) & 0xFF
0x03 XOR  imm  acc = acc ^ imm
0x04 SUB  imm  acc = (acc-imm) & 0xFF
0x05 OUT       out.append(acc)

وتحتاج إلى قاموس من رقم الأمر إلى اسمه:

NAMES = {
    0x00: "HALT", 0x01: "LOAD",
    0x02: "ADD",  0x03: "XOR",
    0x04: "SUB",  0x05: "OUT",
}

وصيغة السطر ثابتة: اسم الأمر، ثم مسافة والمُعامَل بالست عشري إن كان له مُعامَل. والدالة hex تكتب العدد بالبادئة 0x بلا أصفار زائدة، فالاستدعاء hex(1) يُرجع "0x1" والاستدعاء hex(72) يُرجع "0x48".

والدالة decode من الدرس السابق موجودة في كود البداية، فابنِ عليها.

02

المطلوب

اكتب الدالة disasm(program) التي تُرجع قائمة نصوص، سطرًا لكل تعليمة، مثل "LOAD 0x48" للأمر ذي المُعامَل و"OUT" للأمر الذي لا مُعامَل له.

الفحوص

5 فحوص
  1. السطر الأوّل فيه LOAD ومُعامَله
  2. الأمر المفرد باسمه وحده
  3. المُعامَل مكتوب بالدالة hex بلا صفر زائد
  4. القائمة كاملة بخمسة أسطر
  5. على برنامج آخر لم تره
03

تلميحات

0/3
دروس المسارأتممت 0 من 8

اقرأ الأسمبلي واصطلاح الاستدعاء وتدفّق التحكّم، وابنِ لآلة صغيرة مفكّكًا ومحاكيًا، ثم رقّع بايتاتها وتحقّق من سلامتها.

مستواه متوسّط، وفيه 8 دروس مجموع مدّتها ساعتان.

main.py
المخرجاتPython (Pyodide)

نحمّل بيئة Python الآن. يحدث هذا مرّة واحدة فقط، ثم يحفظها متصفّحك.

–/5

يبدأ الفحص حين تجهز البيئة.

تجد 5 فحوص في بطاقة «المطلوب».

دروس المسارأتممت 0 من 8

اقرأ الأسمبلي واصطلاح الاستدعاء وتدفّق التحكّم، وابنِ لآلة صغيرة مفكّكًا ومحاكيًا، ثم رقّع بايتاتها وتحقّق من سلامتها.

مستواه متوسّط، وفيه 8 دروس مجموع مدّتها ساعتان.