الدرس 5 من 8
المفكّك
- 16 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
من الأرقام إلى أسماء مقروءة
الشرح
قائمة الصفوف دقيقة لكنها أرقام. والمفكّك (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 من الدرس السابق موجودة في كود البداية، فابنِ عليها.
المطلوب
اكتب الدالة disasm(program) التي تُرجع قائمة نصوص، سطرًا لكل تعليمة، مثل "LOAD 0x48" للأمر ذي المُعامَل و"OUT" للأمر الذي لا مُعامَل له.
الفحوص
5 فحوص- السطر الأوّل فيه LOAD ومُعامَله
- الأمر المفرد باسمه وحده
- المُعامَل مكتوب بالدالة hex بلا صفر زائد
- القائمة كاملة بخمسة أسطر
- على برنامج آخر لم تره