الدرس 4 من 8

آلة صغيرة: فكّ الترميز

هدف الدرس

تعليمات بأطوال مختلفة

01

الشرح

من هنا تبني أدوات التحليل بنفسك على آلة صغيرة اخترعناها لهذه المنطقة. والآلة الافتراضية (virtual machine) برنامج ينفّذ أوامر مرمَّزة بايتات اسمها البايتكود (bytecode)، كما تفعل Python نفسها مع كودك. وفهم آلة مخترَعة صغيرة أقصر طريق إلى فهم الحقيقية.

لآلتنا خانة واحدة اسمها المُراكِم (accumulator) تبدأ بصفر، وستّة أوامر. كل أمر بايت واحد هو رقم الأمر (opcode)، وأربعة منها يتبعها بايت آخر هو المُعامَل (operand). في كل سطر رقم الأمر، ثم اسمه، ثم imm إن كان يأخذ مُعامَلًا، ثم أثره مكتوبًا بلغة 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)

فالبرنامج 01 48 05 00 يُقرأ هكذا: الأمر LOAD بمُعامَل 0x48، ثم OUT، ثم HALT. أي أن البايت 48 ليس أمرًا بل مُعامَل الأمر الذي قبله. وهذه أهمّ فكرة في فكّ الترميز (decoding): طول التعليمة يختلف، فلا تعرف أين تبدأ التعليمة التالية حتى تعرف طول الحالية.

لذلك تمشي على البايتات بفهرس i: تقرأ الأمر في program[i]، فإن كان له مُعامَل قرأته من program[i + 1] وتقدّمت بايتين، وإلا تقدّمت بايتًا واحدًا. وحين تصل إلى HALT تتوقّف، فما بعده ليس تعليمات.

02

المطلوب

اكتب الدالة decode(program) التي تُرجع قائمة صفوف، صفًّا لكل تعليمة بالشكل (opcode, operand)، ويكون المُعامَل None للأمر الذي لا مُعامَل له. وتوقّف بعد HALT.

الفحوص

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

تلميحات

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

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

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

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

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

–/6

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

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

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

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

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