نكة: معالج تعليمات واحدة

أريد أن أتحدث عن المعالج الذي طورته في عام 2016. يتم تنفيذه في C كجهاز افتراضي. صديقي بيورن كتب مجمعا له في F #.

Periwinkle عبارة عن معالج OISC (كمبيوتر مجموعة التعليمات) ، على عكس RISC و CISC. لا يوجد لديه خطوط الأنابيب. في الواقع ، ليست الإنتاجية الهدف الرئيسي للمشروع ، فقد تم إنشاؤه أكثر من أجل المتعة والأغراض التعليمية.

جاء صديقي ألينا باسم Periwinkle ، أي periwinkle (تعتبر هذه الزهرة العنيدة بشكل مثير للدهشة رمزًا للحيوية - تقريبًا.)

هناك العديد من أنواع التعليمات لـ OISC. ولكن في بيريوينكل ، هذا هو بيان التحرك. فقط انقل الحرفي إلى سجل أو قيمة من سجل إلى آخر. العمليات المنطقية والحسابية ، المتفرعة ، إلخ. أجريت باستخدام السجلات.

طول تعليمات Periwinkle 40 بت ثابت. حافلة البيانات 32 بت.



Periwinkle لديه ما مجموعه 64 السجلات.



فيما يلي وصف لبعض:

عداد البرمجيات (PC)

  • عداد يصل إلى 32 بت
  • حجم ذاكرة البرنامج هو 255 كلمة 40 بت (يعتمد التنفيذ)
  • يؤدي نقل -1 إلى سجل الكمبيوتر إلى توقف العداد بشكل صريح

كومة الأغراض العامة (STK)
  • كومة لأي شيء (16 مستويات عميقة)
  • لا توجد إشارة الفائض ومكدس غير مكتمل
  • قراءة مكدس فارغ بإرجاع 0
  • نقل القيم هنا هو عملية الدفع
  • الانتقال من هنا - عملية البوب

مولد الأرقام العشوائية (RNG)

  • عند استدعاء ، يولد رقم عشوائي 32 بت
  • نقل القيم هنا يبدو بلا معنى

تخطي إذا صفر (SIZ)
  • يتخطى العبارة التالية إذا قمت بتحريك الصفر إليها

تخطي إذا كانت غير صفرية (SINZ)
  • يتخطى العبارة التالية إذا قمت بنقل قيمة غير صفرية إليها

المرجع (المرجع)

  • يستخدم للإشارة إلى عنوان بناءً على قيمة منقولة
  • يتم اقتطاع القيم الكبيرة إلى أرقام 6 بت.

انحراف (DEF)
  • التأجيل بعد المرجع

السجلات المحجوزة (RSV)
  • الانتقال هنا لا يهم. سيظل السجل يحتوي على صفر.
  • يمكن استخدامها لأية مهمة عند نقل جهاز افتراضي إلى متحكم أو أي شيء آخر
  • لسجلات المستقبل / إضافية
  • يمكن استخدامها لإزالة عنصر من سجلات الأغراض العامة والتشغيلية بنقل العنصر هنا (غير مستحسن)
  • عند القراءة ، ترجع 0

سجلات الأغراض العامة (GPR0-GPR31)

  • قد تحتوي على أرقام 32 بت

سجل الصفر

  • يمكن استخدامها لإزالة عنصر من سجلات الأغراض العامة والتشغيلية عن طريق نقل هذا العنصر هنا
  • إرجاع 0 في القراءة

سجل الحالة:

  • 0000 0000 0000 0000 0000 0000 000P ZVNC
  • يحتوي على خمسة أعلام (C ، N ، V ، Z ، P)
  • حمل
  • سلبي
  • فيض
  • صفر
  • سجل PLUS يؤثر على الأعلام C ، N ، V ، Z ، P
  • تؤثر السجلات AND و OR أو XOR على الإشارات N و Z و P
  • ستؤثر العملية الأخيرة قيد التشغيل على سجل الحالة
  • نقل المعنى هنا يبدو بلا معنى.

ولكن كيف تعمل سجلات PLUS و AND أو OR؟ تحتوي هذه السجلات الأربعة على مكدس غريب ، وهو في الواقع مكدس حسابي. عندما يكون هناك رقمان في رصة الحساب ، تبدأ العملية.



هنا مثال لسجل PLUS. يعمل المخطط بشكل مشابه للسجلات الثلاثة الأخرى.

ولكن كيف يمكن إجراء عمليات حسابية مع أربعة مشغلين فقط؟ كما قلت ، فإن الهدف من هذا المشروع هو الترفيه والتعليم. لذلك ، يمكنك توليف الإجراءات المفقودة بشكل مستقل.

يتم الطرح بإضافة رمز إضافي يمثل الأرقام السالبة. يتم تشكيل رمز إضافي عن طريق قلب البتات ، أي بالضغط على الرقم 0xFFFFFFFF (2³²-1) حتى XOR. وإضافة واحدة من خلال سجل PLUS. ومع ذلك ، يدعم المجمّع الأرقام السالبة ، لذلك ليس من الضروري القيام بكل هذا.

الضرب هو مجرد إضافات متعددة.

القسمة هي عدد مرات وضع رقم واحد في عدد. ويمكن حساب ذلك من خلال عداد الطرح المتسلسل.

يتم إزاحة البت عن طريق ضرب 2 أو قسمة 2.

فكر في كيفية تجميع العمليات الأخرى بنفسك.

إذا كنت مهتمًا ، فإليك مستودع github لبعض برامج المجمّع التي كتبت لـ Periwinkle. تعمل تعليمات النقل من اليسار إلى اليمين:

#50 gpr0 //  50(base-10)  gpr0 gpr0 gpr1 //  gpr0  gpr1 

بالإضافة إلى ذلك ، سأحاول تحميل الملف القابل للتنفيذ من الجهاز الظاهري Periwinkle VM. ما منصة للقيام الجهاز الظاهري ل؟ (Windows (x86؟ X86-64؟) ، Linux (x86؟ X86-64؟ ARM؟ ، ARM64؟ ، Etc.؟) ، وما إلى ذلك؟) بما أن المُجَمِّع مكتوب بلغة F # ، فمن المحتمل أن يعمل في كل مكان ، تحتاج فقط إلى .NET Framework ، يمكنك إلقاء نظرة على Mono .

إذا كنت تعرف بنية PIC16 ، فقد تلاحظ بعض أوجه التشابه مع Periwinkle (STATUS ، SIZ ، SINZ ، REF ، DEF). في الواقع ، ألهمتني العمل كأول معمارية بدأت في البرمجة بلغة التجميع.

Source: https://habr.com/ru/post/ar480024/


All Articles