الدرس 6 من 8

المحاكي

هدف الدرس

تنفيذ البايتكود خطوة خطوة

01

الشرح

المفكّك يخبرك بما في البرنامج، والمحاكي (emulator) يخبرك بما يفعله. فبدل أن تقرأ الأوامر تنفّذها واحدًا واحدًا على مُراكِم في Python، وتجمع ما يُخرجه البرنامج. وهكذا يدرس الباحثون برامج كُتبت لمعالجات لا يملكونها، فيشغّلونها خطوة خطوة في محاكٍ ويراقبون كل قيمة.

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)

والحساب كلّه في بايت واحد، أي بالباقي على 256. فإذا كان المُراكِم 255 وأضفت إليه 2 صار 1 لا 257، وإذا طرحت 8 من 5 صار 253. والقناع & 0xFF يفعل هذا في Python، فيُبقي البتات الثمانية الدنيا من أي عدد، حتى السالب منها.

وهيكل كل محاكٍ واحد: عدّاد (program counter) يشير إلى الأمر الحالي، وحلقة تقرأ الأمر وتنفّذه ثم تتقدّم بطول التعليمة، بايتًا للأمر المفرد وبايتين للأمر ذي المُعامَل. والأمر HALT يوقف التنفيذ ولو بقيت بعده بايتات.

02

المطلوب

اكتب الدالة run(program) التي تنفّذ البرنامج وتُرجع مخرجات أوامر OUT من النوع bytes. والبرنامج program في كود البداية يطبع كلمة من حرفين، شغّله بمحاكيك لتعرفها.

الفحوص

6 فحوص
  1. تطبع مخرجات برنامج الشرح
  2. الجمع يبدأ من صفر ويلتفّ بالباقي 256
  3. الطرح يلتفّ بالباقي 256
  4. الأمر XOR يعمل
  5. برنامج يطبع كلمة لم ترها
  6. الأمر HALT يوقف التنفيذ
03

تلميحات

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

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

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

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

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

–/6

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

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

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

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

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