هذه هي المقالة الأولى في سلسلة 161eForth v0.5b ، والتي تنتهي هنا: habr.com/en/post/452572المترجم EFORTH متوفر الآن أيضًا على آلة حاسبة MK-161 للإلكترونيات المحلية! في 17 أيار (مايو) ، اجتاز الإصدار v0.5b اختباراتي بنجاح ، بالإضافة إلى خمسة اختبارات تأليف TEST-TEST4. لقد حققت ما يمكن القيام به وحدي ، لكنني أعتقد أن هذا ليس سوى نصف المعركة. حان الوقت لتقديم أداة جديدة للمجتمع من خلال فتح كود 161eForth للاختبار العام. لدي قائمة بما يجب تحسينه وأين "أعمل على الاستقرار". سيتم أخذ اقتراحاتك وتعليقاتك في الاعتبار عند الانتهاء من العمل وإصدار الإصدار 1.0
عند نقل أحدث إصدار من eForth إلى النظام الأساسي المحلي ، تم التغلب على عائقين بنجاح: السرعة المنخفضة نسبيًا للجهاز 8 بت ، والمبرمج بلغة الإدخال الخاصة به ، والكمية المتواضعة من الذاكرة الثنائية المتاحة (انظر 2.4.1) ، فقط 4096 بايت.

عند كتابة 161eForth ، تم استخدام حلول جاهزة مُعدة لـ Callisto ، لغة الإدخال من الجيل التالي لـ PMK المحلي. هذه تقنية لتنفيذ آلة حصن أعلى ALU العشري وهندسة "Harvard" وبرامج تشغيل وحدة التحكم وتصميم لوحة مفاتيح أبجدية رقمية ، فضلاً عن محطة برمجية تعتمد عليها تعمل على منفذ تسلسلي RS-232. بالإضافة إلى إلكترونيات MK-161 وتوزيع 161eForth ، قد تحتاج إلى لوحة مفاتيح محلية الصنع حيث يتم توقيع الحروف الأبجدية الروسية والإنجليزية على المفاتيح. يتم ترتيب الحروف أبجديًا سطريًا ، من اليسار إلى اليمين ومن الأعلى إلى الأسفل.

أكد الدكتور تشن هانسون تينغ ، مؤلف الإصدارات الحديثة من eForth ، في كتابه [1] على أهمية فهم عنصري القلعة. هذا مترجم داخلي ("عنوان") يسمح للمعدات بتنفيذ تعليمات برمجية مخزنة من Fort ، ومترجم شفوي خارجي ("نص") مسؤول عن الحوار مع شخص ما.
في مقالين ، سوف أتناول بالتفصيل الحلول الأكثر جذرية المستخدمة في تنفيذ كل من هذين المترجمين الشفويين في مجال الإلكترونيات. يمكن أن يكون تعلم هذه الحلول مفيدًا وملهمًا لترحيل eForth إلى أجهزة أخرى ذات ذاكرة وأداء محدودين. إن فهم المقالات سيساعد في مقدمة مبدئية للحسابات الدقيقة القابلة للبرمجة (PMC) وفورت. سأشرح لك اللحظات الصعبة الفريدة للإلكترونيات MK والمترجم الإلكتروني.
بادئ ذي بدء ، يتم تقسيم الكلمات eForth إلى عامة والنظامية.
حجم الحروف يهم. يتم تعريف أسماء الكلمات العادية بأحرف كبيرة ونظام صغير. لقد صنعت أيضًا ابتكاراتي في الحالة الأولى. يقترح مؤلف eForth إجراء الحوار الرئيسي في وضع CAPS. عندما تحتاج إلى استخدام كلمة النظام ، بدّل الوقت إلى أحرف صغيرة (مجموعة مفاتيح FP).
في المقال ، تتم كتابة جميع الكلمات بحروف كبيرة لتبرز من النص. في العديد من تطبيقات eForth المبكرة ، تم استبعاد رؤوس كلمات النظام وليس الإخراج بواسطة أمر WORDS. ساعد هذا في تبسيط ظهور eForth وحفظ انتباه أولئك الذين يستخدمون Fort لأول مرة. في 161eForth ، تم حفظ عناوين هذه الكلمات في المقام الأول بسبب وجود أداة فك تشفير كلمة SEE (انظر الفيديو رقم 3 في نهاية المقال) ، والتي لن تظهر أسماء كلمات النظام إذا تمت إزالة عناوينها.
لتبسيط المقالة وجعلها مفيدة كمرجع ، اضطررت لاستخدام عدة مصطلحات قبل تعريفها. يجب أن يكون محترفو Fort و PMK على دراية بهذه الشروط. يجب على المبتدئين في بعض الأحيان البحث في الأقسام المجاورة (أضع الروابط في الأماكن الصحيحة) أو إعادة قراءة المقال عدة مرات.
تم وضع 161eForth هنا هنا ، إلى جانب النص المصدر ، ولوحة مفاتيح رسومية على الشاشة ومساعدة words.txt مع وصف لجميع الكلمات المنفذة:
http://the-hacker.ru/2019/161eforth0.5b.zipلقد نشرت أيضًا 5 مقاطع فيديو صغيرة على موقع YouTube توضح تشغيل الإصدار 161eForth لأولئك الذين ليس لديهم MK-161. يمكنك
مشاهدة قائمة التشغيل بالكامل على YouTube . أدناه هو الأول منهم ، والباقي 4 في نهاية المقال.
منذ الرابع وتنفيذه
تم تصميم eForth كبديل حديث لمترجم fig-Fort المعروف. للانتقال إلى MK-161 ، اخترت الإصدار 5.2 بت من المترجم 86eForth 32 بت مع رمز مخيط غير مباشر ، كتب في عام 2016 على مجمّع MASM لنظام التشغيل Windows. تم وصف هذا الإصدار بالتفصيل في الإصدار الثالث من eForth و Zen [1]. أولئك الذين يعرفون اللغة الإنجليزية ، أنصحك أن تجد هذا الكتاب وأن تدرسه ، وهو مفيد جدًا لفهم 161eForth.
في رسالة شخصية ، أكد المؤلف أن 86eForth502.asm من هذا الكتاب هو أحدث نسخة من eForth. على الإنترنت ، يمكنك العثور على الكثير من المعلومات باللغة الإنجليزية حول هذا الموضوع وعلى الإصدارات السابقة من eForth.
يتبع تطور eForth مسارًا علميًا يدرسه البروفيسور ويرث مستخدمًا مثاله على لغة البرمجة أوبيرون. كان كل إصدار لاحق من eForth عبارة عن تبسيط للإصدار السابق. تمت إزالة كل ما يمكن الاستغناء عنه من اللسان. لا تزال هناك مجموعة مدروسة بعناية من بنيات اللغة القوية والتعبيرية ، التي تم اختبار قوتها على أكثر من 40 تطبيقًا من التطبيقات المختلفة لمختلف المنصات. الآن على الآلة الحاسبة!
كونها لهجة الحد الأدنى من فورت ، eForth لا تهدف إلى الفوز في السباق ضد أصغر الحصن. مجموعة الكلمات التي يقدمها عملية تمامًا ويمكن للمبرمج توسيعها بسهولة في الاتجاه الضروري لمهامه.
تم إصدار الإصدار الأول من eForth في عام 1990 في مجمّع MASM لمعالجات 8086 وعمل تحت MS-DOS. احتوت على 31 كلمة أساسية تعتمد على الآلة و 191 كلمة رفيعة المستوى. كانت الفكرة بسيطة - يمكنك ترجمة 31 كلمة فقط إلى أداة التجميع الخاصة بك ، وعلى الفور الحصول على eForth على جهاز الكمبيوتر الخاص بك.
تم انتقاد هذا النهج على شبكة الإنترنت ، لأن طريقة تقليل عدد الكلمات في المجمّع قد أدت إلى أداء منخفض للغاية للأنظمة المدمجة. بالفعل في الإصدار الثاني من eForth ، بدأ تنفيذ الحد الأقصى لعدد الكلمات في المجمّع ، مما عدل الميل ليس فقط إلى نظام سهل الحمل ، ولكن أيضًا لنظام برمجة عملي.
لعدة سنوات ، أصدر بيل مونش ، المؤلف الأصلي لـ eForth ، وزميله الدكتور Chen-Hanson Ting إصداراتهما eForth على التوازي. كل نسخة لها خصائصها الخاصة. خيارات eForth لمنصات مختلفة قد وضعت أيضا من قبل المبرمجين الآخرين.
الإصدار 5.2 ، الذي صدر في عام 2016 ، يحتوي على 71 كلمة من "code" و 110 كلمات من "colon". لقد أدى ربع قرن من البحث عن المثالي إلى انخفاض كبير في إجمالي عدد الكلمات. في الوقت نفسه ، لأسباب تتعلق بالأداء ، زادت النسبة المئوية للكلمات المنفذة بمستوى منخفض.
يتمتع الموديل 161eForth المقترح بفوائد سخية لهذا التقدم ، لكنه لا يدعي تطوير خط الجذع بشكل أكبر. يوفر تطبيقي للمبرمج جميع الأدوات الموجودة في الإصدار 5.2. عندما تجعل بنية MK-161 تنفيذ بعض الكلمات 86eFenth مستحيلة أو لا معنى لها ، بدلاً من التخلص من الفائض ، أعطي المبرمجين بديلاً كاملاً ، وأخذه من معيار ANSI / ISO [4]. يمكن لأولئك الذين يبحثون عن بساطتها أن يطردوا كلمات "إضافية" بشكل مستقل ، لأن التقليد 161eForth يأتي مع شفرة المصدر.
عند تطبيق eForth ، التزمت بفهم المؤلف. على سبيل المثال ، في رأيي ، يجب تنفيذ حلقة FOR NEXT بقيمة أولية n تمامًا. نفس الاستنتاج جاء في النهاية تشاك مور ، مؤلف لغتي فورث ولون فورث. لسوء الحظ ، يستخدم eForth اصطلاحًا قديمًا وينفذ مثل هذه الدورة n + 1 مرات ، مع عداد من n إلى 0. لم أقوم بإصلاح هذه المشكلة والعديد من أوجه القصور الأخرى ، مفضلًا التوافق 161eForth مع تطبيقات الأنظمة الأساسية الأخرى.
نظرًا لأن 161eForth هو أول نظام برمجة عملي لإلكترونيات MK-161 ، باستثناء لغة المصنع ، فقد تتبعت تاريخ طويل من eForth وأرجعت بضع كلمات إلى اللغة التي كانت مفيدة على منصات أخرى وربما تكون مطلوبة الآن.
على سبيل المثال ، يحتوي المتغير القديم الجديد 'BOOT على الرمز المميز (انظر 3.1) للكلمة ، والذي يتم تنفيذه أولاً بعد تهيئة البيئة ، ولكن قبل بدء الحوار. بشكل افتراضي ، يحتوي "BOOT" على رمز TLOAD لتفسير الشفرة من "منطقة النص" (انظر 2.4.2). يسمح هذا للمبرمج بتخصيص eForth لنفسه دون إعادة تجميع البيئة ، والتي لا يزال من المستحيل إنتاجها على متن "الإلكترونيات".
تتمثل المهام ذات الأولوية للتنفيذ في حفظ الذاكرة الثنائية (انظر 2.4.1) وتحسين الأداء. أدى حلهم إلى انخفاض كبير في عدد الكلمات عالية المستوى ، لأن شفرتها تشغل هذه الذاكرة الثمينة ، بسبب زيادة عدد الكلمات الأساسية السريعة المنفذة في ذاكرة البرنامج الرخيصة (انظر 2.4.3).
نتيجة لذلك ، يحتوي 161eForth على 129 كلمة رمز و 78 كلمة عالية المستوى ويحتل 1816 بايت من ذاكرة MK-161 الثنائية ، أي أقل من نصفها. هذا يعطي الأمل في metacompilation من الجزء الرفيع المستوى مباشرة على متن الالكترونيات.
ينقسم الكود المصدري لـ eForth MK-161 إلى قسمين كبيرين. يوجد الأساسية المكتوبة في نظام التشغيل MK-161 في ملف eForth0.mkl. يتم تعريف الكلمات عالية المستوى في SP-Forth وتوضع في ملف eForth.f.
يحتوي التوزيع أيضًا على ملف تعليمات files.txt ، والذي يوثق جميع الكلمات 161eForth مع تدوين مكدس وشرح موجز في سطر واحد.
1.1 الكود المصدري للنواة eForth0.mkl
يحتوي جوهر eForth على تعليمات برمجية قابلة للتنفيذ تعمل في ذاكرة برامج MK-161 (انظر 2.4.3) ، والتي يتم تجميعها على جهاز كمبيوتر في ملف eForth0.mkp بالوسائل القياسية ، على سبيل المثال ، برنامج مترجم MKL2MKP الخاص.
تتم كتابة التعليمات البرمجية المصدر kernel الموجودة في ملف eForth0.mkl في
فن الإستذكار اللاتينية . على سبيل المثال ، يتم كتابة أمر IPE لقراءة السجل E (ويعرف أيضًا باسم R14) في هذا المصطلحات باسم RME. كونها غير عادية لأصحاب PMK السوفيتية ، فن الإستذكار اللاتيني مناسب للكتابة من لوحة مفاتيح الكمبيوتر. في الواقع ، من الأسهل كتابة FX FX 2 غريبة من المألوف في الطفولة Fx².
ملف eForth0.mkp هو إعداد مسبق لـ kernel. بالإضافة إلى رمز البدائية ، يحتوي على رأس kernel وجدول بأسماء tblNames ، والذي تنقله eForth.f أثناء فك التشفير إلى السجلات العشرية (انظر 2.4.4). على أساس eForth0.mkp سيتم إنشاء نواة eForth.mkp (انظر 2.4.3) ، لذلك يجب تجميع eForth0.mkl أولاً.
1.2 شفرة المصدر للكلمات عالية المستوى eForth.f
يتم تغذية ملف eForth.f بإدخال المترجم المحلي الرائع SP-Forth [5]. يحتوي الملف على تعريفات لجميع الكلمات عالية المستوى. بمرور الوقت ، يمكن التعرف عليها على الفور نفسها وربما يتم تجميعها مباشرة على متن الالكترونيات MK-161.
أثناء التحويل البرمجي ، يقوم eForth.f بقراءة جوهر eForth0.mkp فارغًا وبمساعدته يقوم بإنشاء ثلاثة ملفات في الدليل الحالي للتحميل لاحقًا إلى MK-161: eForth.mkp و eForth.mkd و eForth.mkb. إنه eForth.mkb الذي يحتوي على نصوص الكلمات عالية المستوى ، على الرغم من أن رؤوسها موجودة في ملف eForth.mkd.
الملف الرابع ، eForth.mkt ، مكتوب يدويًا في eForth ويمكن تحريره على متن MK-161 باستخدام محرر النصوص المدمج. كل من هذه الملفات الأربعة سأقوم بتحليلها بمزيد من التفاصيل أدناه (انظر 2.4).
2. الالكترونيات MK-161
تدعو شركة مصنعة من نوفوسيبيرسك MK-161 إلى اختصار قديم. كان هذا هو اسم الآلات الحاسبة الأولى في الاتحاد السوفياتي. يرث نظام التعليمات MK-161 نظام قيادة الآلات الحاسبة السوفيتية "Electronics B3-34" و "Electronics MK-61". هذا يعني أن البرامج المكتوبة من أجل الآلات الحاسبة السوفيتية ستذهب إلى MK-161 بدون تغييرات أو مع تغييرات طفيفة.
العكس ليس صحيحا. eForth لن يذهب إلى PMK السوفياتي ، ل يستخدم الكثير من الموارد التي ظهرت لأول مرة في MK-152/161 ولم تكن متوفرة في النماذج السابقة من السلسلة.
النظر في ميزات لغة الإدخال والهندسة المعمارية من MK-161 ، والتي أثرت على 161eForth (المشار إليها فيما يلي باسم ببساطة eForth) وأعطت تنفيذ مناقشتها من eForth "لهجة روسية".
أول هذه الميزات هو اتفاق
"كبار في عنوان جونيور" ، والذي يتم الحفاظ عليه باستمرار في MK-161. على سبيل المثال ، سيتم كتابة الرقم 1000 = 3 × 256 + 232 بخطوتين متتاليتين ، مثل 3 و 232.
2.1 معالجة غير مباشرة
سمعت PMK السوفياتي البرمجة عن معالجة غير مباشرة.
لمعالجة مباشرة ، نشير صراحة إلى رقم التسجيل الذي نشير إليه. على سبيل المثال ، يتناول P IP 44 محتويات السجل 44. يُستخدم المفتاح P الذي ظهر في MK-152 للوصول إلى السجلات التي تحتوي على الرقم 15 أو أكثر - كانت هذه السجلات غائبة في PMK السوفياتي.
في
العنونة غير المباشرة ، فإن رقم السجل المطلوب غير معروف مقدمًا. هذا الرقم في سجل مختلف. على سبيل المثال ، إذا كان السجل 8 يحتوي على الرقم 44 ، فإن الأمر K PI 8 يأخذ في الاعتبار محتويات السجل 44 (R44).
يمكن الجمع بين مفاتيح K و P. على سبيل المثال ، سينقل الأمر R K BP 20 التحكم (GOTO في فن الإستذكار اللاتيني) إلى العنوان المخزن في R20.
تتعلق الميزة التي تبين أنها مهمة للمترجم الفوري الداخلي eForth بالزيادة / النقصان الأولي في السجلات أثناء المعالجة غير المباشرة. موروث هذه الميزة من PMK السوفياتي.
على سبيل المثال ، أوامر القراءة غير المباشرة KI 0 و KI 1 و KI 2 و KI 3 تقلل من محتويات السجلات 0 أو 1 أو 2 أو 3 بواحد إلى السجل المطلوب. الأوامر KI 4 و KI 5 و KI 6 قبل القراءة ، قم بزيادة محتويات السجلات 4 أو 5 أو 6 بواحد.
يسمح لك "التعديل" في سجل العناوين بمعالجة مجموعات كاملة من السجلات في حلقة. يشبه ++ R و - R في C. رقم تسجيل السجل مهم. هو الذي يحدد ما إذا كان سيزيد (سجلات 4-6) أو ينقص (سجلات 0-3) مع عنونة غير مباشرة.
تأثرت بنية 161eForth بحقيقة أن الزيادة في سجلات 4-6 مع عنونة غير مباشرة هي
الأولي . نتيجة لذلك ، يشير مؤشر التفسير (IP) الموجود في R6 دائمًا
إلى البايت الأخير من الكود المُخيط. في 86eForth ، يشير IP دائمًا إلى بايت لاحق لم تتم قراءته بعد.
هذا صحيح أيضًا لمؤشر مكدس الإرجاع (RP) المخزن في السجل 2. يشير R2 دائمًا إلى أعلى مكدس الإرجاع.
من الميزات المفيدة في MK-161 عدم وجود زيادة / نقصان في السجل في حالة حدوث عنونة غير مباشرة باستخدام المفتاح الجديد R. على سبيل المثال ، يحسب RKIP02 الرقم من أعلى مكدس الإرجاع دون تغيير المؤشر. هذا فريق Fort R @ جاهز. مما سبق يتضح أن قيمة القراءة هي أقل من عنوان الرمز المميز التالي ، والذي سيتم تنفيذه بعد الرجوع من كلمة "النقطتين".
عندما تضطر إلى تطوير أو دراسة كلمات تتفاعل عن كثب مع المترجم الداخلي eForth ، تأكد من فهم هذه النقطة الدقيقة المرتبطة
بالمبالغة .
2.2 الجداول ، أمر والنقابي
توجد جداول MK-161 في ذاكرة البرنامج (انظر 2.4.3). ظهرت في نوفوسيبيرسك "إلكترونيات MK" وغير مألوفة تماما للخبراء في PMK السوفياتي. يتم تخزين عنوان الجدول المستخدم دائمًا في السجل 9042 ، ولكن الوصول إليه مختلف.
جدول مرتب هو صفيف أعداد صحيحة 16 بت غير موقعة. يحتوي eForth على جدول tblTokens مع عناوين البدائية (انظر 3.1.1) - حصن الكلمات المكتوبة في نظام قيادة MK-161. يستخدم مترجم العنوان (راجع 3.2) الجدول tblTokens لتنفيذ رمز مخيط بسرعة ، لذلك يحاول eForth دائمًا احتواء عنوان هذا الجدول في R9042.
للوصول إلى جدول مرتب ، تحتاج إلى كتابة رقم العنصر المطلوب في R9210. سيتم استبدال الرقم n في السجل X بقيمة عنصر الجدول بالرقم n ، يبدأ العد من الصفر.
يتم استخدام الجداول المرتبطة ("البحث حسب القيمة") بفعالية بواسطة eForth ، في المقام الأول بواسطة البدائية (FIND) ، وتبحث عن كلمة باسمها. أيضًا ، يتم استخدام الجدول tblCHPUT النقابي عند طباعة الحروف على الشاشة لمعالجة موجزات الأسطر ورموز التحكم الأخرى.
للبحث عن العنصر n في الجدول النقابي ، اكتب n إلى R9212. سيتم استبدال الرقم n في السجل X (تسميه الإدارة "الفهرس") بقيمة 16 بت المسجلة في الجدول بعد "الفهرس" مباشرة.
ساعد وجود وظيفة البحث السريعة ، وإن كانت بسيطة ، والتي تم تنفيذها بلغة التجميع في "البرنامج الثابت" MK-161 ، على تحقيق أداء مقبول عند التعرف على أسماء الكلمات وبرامج التجميع. بالطبع ، لهذا كان علي أن أطور ليس أبسط جداول التعرف على الاسم ، "شحذ" لهذه الوظيفة. سنتحدث عن هذا بمزيد من التفصيل في المقالة الثانية.
2.3 المقاطعات وحدة التحكم
يسمح "MK Electronics" لأصحابها بكتابة برامج بلغة الإدخال التي تستجيب لأحداث معينة - مثل الضغط على زر أو تحريره ، وإنهاء عدد الموقت.
يستخدم eForth بنشاط
نظام المقاطعة هذا لإدخال كل من لوحة المفاتيح وإظهار مؤشر وميض عند مطالبتك بهذا الإدخال ولإدخال / إخراج عبر منفذ تسلسلي عالمي (RS-232).
قائمة الانتظار الحروف من لوحة المفاتيح هي bufKbd في قائمة الانتظار كما تضغط على المفاتيح. هذا مريح للغاية ويوفر الوقت على الأنظمة ذات السرعة المنخفضة. تتم معالجة تبديل الحروف الأبجدية والحالة بواسطة مقاطعة KeyPress ولا تشغل مساحة قائمة الانتظار. الضغط لفترة طويلة على مفتاح يدعو التكرار التلقائي.
عندما يكون سطر 8 أحرف ممتلئًا ، و eForth ليس جاهزًا بعد لمعالجة الإدخال (الموقف نادر جدًا) ، فإن MK-161 سيصدر صريرًا غير سعيد. بالطبع ، لا أرغب في تنفيذ كل هذا العمل الطبيعي للوحة المفاتيح في المترجم ، ولكن للحصول على MK-161 "خارج الصندوق" كخدمة للبرنامج المدمج (البرامج الثابتة). لكن ما ، كما يقولون ، غني.
بعد بدء العمل ، يتم توجيه جميع مخرجات eForth إلى
شاشة الرسوم MK-161. يتم تنفيذ إخراج الحروف من خلال روتين بسيط نسبيا من CNCut. الصعوبة الوحيدة هنا هي تنفيذ كود التحكم BS ، "الفضاء الخلفي". يستخدم MK-161 خط متناسب. لذلك ، في tblBS عازلة خاصة ، عليك أن تتذكر مواضع الأحرف المعروضة ، حيث يأخذ منها رمز إخراج BS لاحقًا.
أثناء الحوار ، يمكن للمستخدم استخدام كلمة IO> لإعادة توجيه جميع I / O إلى المنفذ التسلسلي RS-232 ، مما يجعل من الممكن برمجة MK-161 من لوحة مفاتيح كمبيوتر مألوفة أو من MK-161 آخر . كلمة CON> إرجاع التحكم إلى وحدة التحكم الحاسبة.2.4 مناطق الذاكرة وتثبيت eForth على MK-161
تتألف ذاكرة "MK-161 Electronics" من ذاكرة البرنامج القابلة للضبط بشكل منفصل وذاكرة تسجيل البيانات. في المقابل ، ذاكرة التسجيل غير متجانسة وتنقسم إلى ثلاثة مساحات كبيرة.تسجيلات الأرقام من 0 إلى 999 تخزين "الأرقام العشرية". هذه هي السجلات العادية ، كما هو الحال في "الالكترونيات B3-34" والآلات الحاسبة الأخرى. فهي ببساطة قادرة على تخزين ليس 8 ، ولكن 12 منزلة عشرية من "السرعوف".يسجل بأرقام من 1000 إلى 8167 أعداد صحيحة للتخزين من 0 إلى 255. تسمى آخر 3 كيلوبايت من هذه المنطقة بعناوين من 5096 إلى 8167 منطقة النص .تسمى السجلات ذات الأرقام من 9000 إلى 9999 سجلات الوظائف. تشبه منطقة الخدمة الخاصة بمساحة العنوان منافذ الإدخال / الإخراج للمعالج الدقيق. بمساعدة أوامر الكتابة والقراءة ، يتم استخدام هذه العناوين للوصول إلى أجهزة الإدخال / الإخراج وأنظمة المقاطعة ، إلخ.لتثبيت eForth على "Electronics MK-161" ، يكفي نقل أربعة ملفات إلى الآلة الحاسبة ، على سبيل المثال ، باستخدام برنامج الشركة المصنعة MK.EXE:- اكتب eForth.mkp على ذاكرة البرنامج بدءًا من الصفحة 0. يشغل الإصدار 0.5b 74 صفحة.
- اكتب eForth.mkd إلى ذاكرة البيانات العشرية
- اكتب eForth.mkb لذاكرة البيانات الثنائية
- اكتب eForth.mkt لذاكرة النص
بعد النقل إلى الآلة الحاسبة ، أوصي بحفظ هذه الملفات الأربعة على الفور في دليل منفصل من "القرص الإلكتروني" المدمج. نظرًا لأن لديهم نفس الاسم ، يمكنك تنزيل eForth على الفور في وقت واحد كـ "حزمة".2.4.1 الذاكرة الثنائية ("البايت") MK-161: eForth.mkb
يتم استخدام سجلات إلكترونيات MK بالأرقام من 1000 إلى 5095 لتخزين الأرقام من 0 إلى 255. تسمى هذه المنطقة من ذاكرة السجل الخاصة بالحاسبة بالثنائي. يمكن الوصول إلى سجلتين ثنائيتين متتاليتين من eForth كـ "خلية" واحدة 16 بت ، و (كما هو الحال في كل مكان في MK-161) ، توجد 8 بتات العليا في السجل برقم أقل.تستخدم eForth هذه "الذاكرة الثنائية" الصغيرة جدًا باعتبارها أساسها الأساسي. الكلمات تعمل معها! و @ و HERE و ALLOT ، فقط من هنا ينفّذ مترجم العنوان الرمز المخيط (انظر 3.2). فيما يلي المتغيرات eForth ، ومخزن إدخال النص المؤقت (TIB) ، والقاموس ، ومكدس التراجع tblBS لتطبيق مسافة للخلف.4096 بايت متواضع للغاية ، بالمعايير الحديثة. لذلك ، بذلت جهود هائلة لإحضار كل ما هو ممكن إلى مناطق أخرى من الذاكرة.2.4.2 مساحة النص: eForth.mkt
مباشرة بعد الذاكرة الثنائية هي منطقة نص ، تسجل بالأرقام من 5095 إلى 8167. من الناحية الفنية ، هذه هي نفس سجلات البايت ، لكن القدرة على كتابتها على القرص وقراءتها كملف منفصل تجعل هذه المنطقة خاصة.يتم استخدام كلمة TLOAD للعمل مع "النص" في eForth. يغذي هذه المنطقة بأكملها لإدخال مترجم النص ، كسلسلة بطول 3072 حرفًا.يوجد خلاف حول كيفية تقسيم النص إلى أسطر. يصر محرر مُضمّن في MK Electronics على طول سطر يتكون من 24 حرفًا. يستخدم Callisto اصطلاح Fort ، حيث تحتوي السلسلة على 64 حرفًا. يوفر eForth للمستخدم إمكانية اختيار حساب كل النص كخط طويل واحد. يمكنك استخدام المحرر المدمج في MK-161. يمكنك كتابة الخاصة بك ، متوافقة مع Callisto.فيما يلي المحتوى الأولي لـ eForth.mkt ، للراحة ، وينقسم إلى ثلاثة أسطر:: hi ." , %user%!" CR ; ' hi 'boot ! hi \
يحدد السطر الأول الكلمة الجديدة hi التي تستقبل المستخدم. يأخذ السطر الثاني الرمز المميز لهذه الكلمة (راجع 3.1) ويضعها في المتغير 'BOOT (انظر 1). الآن ستتوقف مساحة النص عن التحويل البرمجي في كل مرة يبدأ فيها eForth. بدلاً من ذلك ، سيتم تنفيذ الترحيب المترجمة بالفعل.
يبدأ السطر الأخير في تشغيل الكلمة hi وعرض التحية على الشاشة. الكلمة \ تكمل تفسير النص ، مع إعادة التحكم إلى وحدة التحكم.
لتجميع ملف نصي تعسفي ، تحتاج إلى الانتقال إلى الحاسبة باستخدام أمر BYE ، والانتقال إلى القائمة الرئيسية وتحميل الملف المطلوب في وضع DOS. يمكنك أيضًا نقل ملف mkt من جهاز كمبيوتر. سيعودك المفتاح C / P إلى eForth ، وبعد ذلك يمكنك باستخدام الأمر TLOAD تجميع الملف الذي تم تحميله في منطقة النص.
2.4.3 ذاكرة البرنامج: eForth.mkp
ذاكرة البرنامج MK-161 هي مساحة عنوان معزولة. كما أنه يخزن البايتات ، لكنها للقراءة فقط. تحتوي ذاكرة البرنامج على 10000 "خطوة" ، والتي تبين أنها زائدة عن الحاجة إلى eForth. تبين أن أكثر من ربع ذاكرة البرنامج مجانية ، مما يوفر احتياطيًا جيدًا لتطوير المترجم.
فقط في ذاكرة البرنامج يمكن تنفيذ "كلمات الكود". أيضًا ، يتم تقديم جداول التعرف على الاسم وجميع سلاسل النصوص المعروفة هنا ، مما يوفر الذاكرة الثنائية.
يمكن لبعض الكلمات ، مثل C @ و COUNT و TYPE ، معالجة ذاكرة البرنامج إذا كان العنوان ليس رقمًا موجبًا. على سبيل المثال ، تُعد الجملة 0 C @ "خطوة" (بايت) من العنوان 0 لذاكرة البرنامج.
2.4.4 الذاكرة العشرية: eForth.mkd
تسمى سجلات MK Electronics بالأرقام من 0 إلى 999 الأرقام العشرية وتحتوي على الأرقام المستخدمة في العمليات الحسابية العادية على الآلة الحاسبة - 12 رقمًا عشريًا من "mantissa" ورقمين عشريين من "الترتيب". تم تصميم الحصن للعمل مع أعداد صحيحة يصل طولها إلى 4 بايت ، ومثل هذا المورد لا لزوم لها بشكل واضح ل eForth.
يتم استخدام الذاكرة العشرية لحفظ الذاكرة الثنائية الثمينة. مكدسات من البيانات والعائدات مصنوعة هنا. يتم تخزين عناوين الكلمات هنا - سواء المعرفة والمضمنة ، سجل واحد لكل عنوان. يتيح لك هذا الأسلوب إعادة تعريف الكلمات حتى بأسماء قياسية.
كومة في الذاكرة العشرية يؤدي إلى عدد من الميزات المميزة للقلعة على MK-161. أولاً ، نطاق قيم عناصر المكدس ضخم ؛ حيث يمكنه استيعاب أعداد صحيحة 32 بت. تختفي الحاجة إلى "أعداد صحيحة مزدوجة" على MK-161 ، على الرغم من أنه من أجل التوافق ، قمت بتنفيذ الكلمات المقابلة من البداية. يتم تقديم "أعداد صحيحة مزدوجة" على MK-161 ، كعنصر مكدس يحتوي على أرقام من 0 إلى 65535 ، بترميز عدد صحيح 32 بت واحد مع تسجيل الدخول في التعليمات البرمجية الإضافية. يتم وضع أعلى 16 بت من هذا الرقم في الأعلى ، أي عند أدنى عنوان.
العمليات المنطقية bitwise AND و OR و XOR و NOT معاملة الوسائط الخاصة بهم كـ أعداد صحيحة 16 بت. يتم تحويل نتيجة من 32768 إلى 65535 إلى أرقام سالبة من -32768 إلى -1. في eForth ، يتم تشفير false مع صفر والحقيقة ناقص واحد. صحيح أيضا أي قيمة أخرى غير الصفر.
الميزة الثانية من مكدس البيانات 161eForth هي أنه يحتوي على أرقام موقعة. عندما تقرأ الكلمة @ الرقم 65535 من "خلية" 16 بت ، يتم تحويلها تلقائيًا إلى -1.
يتم توفير
كلمة "غير موقعة" خاصة U @ من أجل حساب 65535 مباشرةً ، مع علامة الجمع.
أذكر أنه من أجل السرعة ، لا
يوجد العنصران العلويان من مكدس البيانات في الذاكرة العشرية ، ولكن مباشرة
في سجلات X و Y.حقيقة أن السجلات العشرية يمكن أن تحتوي على أرقام كسرية وأرقام الفاصلة العائمة لا يتم استخدامها من قبل eForth. يستخدم الجهاز الظاهري eForth هذه السجلات لتخزين الأعداد الصحيحة العشرية 12 بت موقعة. يتم الوصول إلى السجلات العشرية بالكلمات C @ و C! - نفس تلك التي تعمل مع أي سجلات واحدة.
3. المترجم الداخلي
جوهر eForth هو برنامج مكتوب بلغة الإدخال MK-161. ينقل أمر MAIN الأول التحكم إلى رمز MAIN ، والذي يكتشف أولاً ظروف إعادة التشغيل. إذا كان سبب ذلك هو الرمز الخاطئ ، فإن MK-161 سوف يصيح. عند بدء التشغيل الأول ، وكذلك بعد تشغيل MK-161 ، يتم مسح الشاشة. بعد ذلك ، يقوم MAIN باستدعاء الروتين الفرعي Init لتهيئة نظام المقاطعة وكل ما تحتاج إليه برامج تشغيل وحدة التحكم MK-161.
بعد تهيئة مكدسات البيانات وإرجاعها ، يكتمل الجزء المنخفض المستوى من البداية. تحدث أشياء مدهشة بالنسبة للأجهزة التي تتميز بهندسة Harvard المعمارية - حيث تستمر eForth في تنفيذ "كود سلكي" من ذاكرة البايت. ينتمي شرف كونه الأول إلى كلمة يتم تسجيل عنوان رأسها في R43. هذه هي عادة الكلمة الباردة.
كيف يتم ترتيب
الكلمات عالية المستوى ؟ أي كلمة تتكون من جزأين ، جسم وعنوان. يتم تخزين
رأس في العشرية. يساعد المترجم الخارجي و decompiler في العثور على اسم ونص الكلمة. يحتوي العنوان أيضًا على
حقل "معجم" - مجموعة من العلامات التي تساعد المترجم الخارجي على معالجة الكلمة الموجودة بشكل صحيح. المترجم الداخلي هو أكثر أهمية بكثير لجسم VCA الموجود في الذاكرة الثنائية وتخزينها في القاموس. إنه قادر على تنفيذ الكلمات التي ليس لها عنوان.
يبدأ نص VCA مع بايت
حقل الرمز ، والذي يحتوي على عنوان
معالج هذه الكلمة. تتم كتابة أربعة معالجات VCA بلغة إدخال MK-161 وتبدأ في الصفحة الأولى من ذاكرة البرنامج. سنقوم بتحليلها جميعًا (راجع 3.3) ، ولكن الاسم الرئيسي يسمى DOLST ويقع في العنوان 02 ، مباشرة بعد الأمر الذي تم بالفعل دراسته في MAIN BP. يقوم هذا المعالج بتنفيذ كلمات Fort المحددة بنقطتين.
بعد بايت
حقل الرمز
هو حقل معلمة من الطول التعسفي. في "الكلمات النقطية" ، يحتوي حقل المعلمة على "رمز مخيط" - سلسلة من الرموز المميزة ذات 16 بت ، يشير كل منها إلى إجراء واحد تم تعيينه إليه.
أولاً ، سننظر في الرمز بمزيد من التفاصيل. ثم سنقوم بدراسة المترجم الداخلي INEXT ، والذي ينتقل من رمز واحد إلى تنفيذ التالي. استدعاء EForth INEXT معالج بدائي. نختتم هذه الجولة للمترجم الداخلي من خلال تحليل جميع معالجات العبوات الناسفة الأربعة.
3.1 الرموز
يمثل
الرمز الرمز الكلمة في الكومة المخزنة والمكدس ، مما يسمح بتنفيذها بسرعة. الرمز مميز هو مؤشر إلى نص الكلمة ، لكن البنية القاسية لـ MK-161 أجرت تعديلات خاصة بها على هذه الفكرة البسيطة. دعنا نحلل جميع أنواع الرموز ، بدءًا من الرمز المميز البدائي.
3.1.1 الرمز البدائي
يتم ترقيم جميع الكلمات المدرجة في توزيع eForth من 0 إلى 206. هذا الترقيم من طرف إلى طرف ، مع مراعاة كل من البدائية و VCA. يتم ذلك بحيث يكون من السهل استعادة
اسمه بعدد الكلمات. يتم تخزين هذه الأسماء في ذاكرة البرنامج. يمكن العثور بسهولة على رابط الاسم المطلوب من خلال جدول الرأس.
الرقم البدائي هو رمزه . مثل أي رمز ، يأخذ البدائي وحدتي بايت في رمز مخيط. الأول هو صفر. والثاني يحتوي على رقمه. يتيح لك الجدول tblTokens العثور بسرعة على عنوان الرمز البدائي من خلال هذا الرقم. يتم تخزين عنوان tblTokens بشكل دائم في R9042 (انظر 2.2) ، وهذا هو ، كل شيء دائما في متناول اليد لتنفيذ البدائية.
تتيح لك الكلمة XT> معرفة عنوان الكود البدائي برقمه (الرمز المميز). نظرًا لوجود رمز الأوليات دائمًا في ذاكرة البرنامج ، يكون العنوان المستلم دائمًا سلبيًا (انظر 2.4.3).
3.1.2 رمز VCA
يمكن أن يكون لـ VCA رقم خاص به واسم قياسي مرتبط ، أو يمكن أن يكون جديدًا تمامًا ، تم إنشاؤه بواسطة المستخدم. في جميع الحالات ، يكون
رمز VCA هو عنوان حقل الرمز الخاص به (انظر 3) ، أي رقم من 1000 إلى 5095.
في رمز مخيط ، يتم كتابة الرمز المميز VCA بطريقة غير عادية للغاية. عدد المئات (رقم من 10 إلى 50) مكتوب في البايت الأول ، والباقي من تقسيم الرمز المميز على 100 (رقم من 0 إلى 99) في البايت الثاني.
على سبيل المثال ، سيتم تمثيل الرمز المميز 1234 بواسطة وحدتي بايت 12 و 34. يتم إجراء تجميع لهذا ، وأي رمز مميز آخر ، باستخدام كلمة COMPILE مأخوذة من معيار ANSI. لكتابة وقراءة الرموز VCA في رمز مخيط ، والكلمات XT! و XT @. يمكنهم الوصول إلى العناوين (انظر 3.1.4) ، وكلمة XT @ قادرة أيضًا على قراءة الرمز البدائي.
3.1.3 عدد صحيح حرفي
الحرفيات بأكملها هي نوع من الرموز البدائية. أنها غير عادية بما فيه الكفاية للنظر فيها بشكل منفصل.
في رمز مخيط ، تشغل الرموز المميزة DOLIT و DOLITM أربعة بايت. تحتوي البايتان الأولان على الرمز المميز البدائي الذي تم النظر فيه بالفعل ، أي 0 وعدد البدائية. تحتوي البايتان التاليتان على عدد صحيح سيضعه الحرفي المحدد على مكدس البيانات أثناء التنفيذ.
يختلف DOLITM في أنه يغير علامة الرقم قبل وضعها على المكدس. وهي مصممة لتنفيذ الأرقام السالبة.
3.1.4 العنوان الحرفي
مثل كل الحرف ، يشغل كل من العنوانان الثلاثة BRANCH و BRANCH و DONXT 4 بايت لكل منهما في الكود المخيط. تحتوي البايتان الأولان على الرمز المميز البدائي ، البايتان الأخيران هما عنوان الانتقال.
يتم تسجيل العنوان بنفس تنسيق رمز VCA (انظر 3.1.2). تحتوي البايتة الأولى على عدد المئات ، والثانية تحتوي على الباقي لتقسيم العنوان على 100. وأذكر أنه بسبب المبالغة (انظر 2.1) ، لا يحتوي عنوان النقل على عنوان الرمز المميز المطلوب ، ولكن يحتوي على رقم أقل بواحد.
يساعد الرمز المميز لـ DONXT على تطبيق "نهاية الدورة" لـ FOR-NEXT (انظر 1). هناك حاجة إلى قفزة BRANCH غير المشروطة لتنفيذ حلقة BEGIN-AGAIN اللانهائية. الفرع الشرطي - ينقل الفرع التحكم إذا كان الصفر في الجزء العلوي من مكدس البيانات (خطأ). إنه يعمل على تنفيذ عبارة IF-THEN الشرطية ، ويخرج من "حلقات غير محددة" BEGIN-UNTIL و BEGIN-WHILE-REPEAT.
3.1.5 حرفية السلسلة
تمثل
حرفية السلسلة نوعًا من رموز VCA. في الكود المُخيط لسلسلة حرفية ، بعد رمز ، هناك بايت ذو طول خيط ، وبعدها السلسلة نفسها ، من البايتة الأولى إلى الأخيرة.
لدى EForth ثلاثة حرفية سلسلة: $ "| ،." | و إحباط "|. يتم تعريفهم في ملف eForth0.mkl على أنه رموز STRQP و DOTQP و ABORQ ، على التوالي. يتم العمل الرئيسي" الحرفي "لهم من خلال الكلمة do $ ، الرمز المميز DOSTR.
لجعل حجم المقالة معقولًا ، لا يمكنني الإسهاب في الحديث عن هذا الموضوع المثير للاهتمام ، لكن من الجيد معرفة مدى توفره في الموقع الإلكتروني.
3.2 عنوان مترجم
لقد حان الوقت للنظر
في المترجم الشفهي ، الذي يتم كتابة عنوانه دائمًا في السجل 9. معظم العناصر الأولية تنتهي من عملها باستخدام الأمر K BP 9 ، الذي ينقل التحكم إلى ملصق INEXT.
INEXT: 6 Fx≠0 NPrime NData: 2 6 + 7 F⟳ 7 8 F⟳ 8
أولاً ، يقرأ مترجم العنوان البايت الأول من الرمز المميز التالي باستخدام الأمر KIP6. إذا كان الصفر ، فهذا بدائي وسوف تتعامل الكود الموجود تحت العلامة NPrime مع الرمز المميز.
تشير التسمية NData إلى معالجة الرمز المميز VCA. يتم ضرب البايت الأول بمائة بواسطة أمر VP 2 ، وبعد ذلك يضيف KIP6 + البايتة الثانية للرمز المميز إلى النتيجة (انظر 3.1.2). يتم إدخال الرمز المميز للقراءة بواسطة فريق P7 في "سجل العمل" WP (R7).
نعلم أن الرمز المميز VCA هو عنوان حقل الرمز الخاص به ، والذي يحتوي على عنوان المعالج. تقرأ أوامر KIP7 P8 بايت حقل الرمز في R8 ، ويقوم أمر KBP8 بنقل التحكم إلى معالج VCA. يعلم المعالج أن R7 يحتوي على رقم واحد أقل من عنوان حقل المعلمة للكلمة قيد المعالجة.
الأوامر F⟳ مع الكود 25 هي "مرتبة" على المكدس. الحقيقة هي أن eForth يخزن أول عنصرين من مكدس البيانات مباشرة في سجلات X و Y من مكدس MK-161. يعمل هذا الحل على تسريع العمل ، ولكنه يجعل من الضروري التأكد من عدم فقد هذه البيانات المهمة.
يبقى أن نفهم كيف ينفذ مترجم العنوان البدائية.
NPrime: F⟳ 6 9210 8 F⟳ 8
يقرأ الأمر KIP6 البايت الثاني من الرمز المميز البدائي. قراءة أوامر RRP9210 P8 عنوان هذه البدائية من الجدول tblTokens (انظر 2.2 و 3.1.1) ، و KBP8 نقل التحكم إلى هذا البدائي.
على النحو الوارد أعلاه ، F⟳ إزالة الفائض من المكدس ، واستعادة محتويات السجلات X و Y.
مترجم عنوان eForth صغير جدًا بحيث يتكرر عدة مرات في ذاكرة البرنامج. يتم تنفيذ النسخة الرئيسية بواسطة الأمر K BP 9 ، الذي يكمل معظم الأوليات.
كتمرين ، أوصي بدراسة تنفيذ الكلمة EXECUTE ، الموضوعة بعد ملصق EXECU. هذا هو متغير INEXT ، الذي يقرأ الرمز المميز ليس من رمز مخيط ، لكنه يأخذ من مكدس البيانات.
3.3 معالجات VCA
تحتوي أربعة أنواع من VCA على أربعة معالجات مختلفة: DOLST و DOVAR و DOCON و DOCONM. لقد رأينا بالفعل أعلاه أن مترجم العنوان قبل استدعاء المعالج يترك في R7 عنوان حقل رمز الكلمة قيد المعالجة.
يتعلم eForth.f عناوين هذه المعالجات عن طريق قراءة رأس kernel من ملف eForth0.mkp. هذا يساعده على ترجمة VCA لـ Electronics MK-161 بشكل صحيح عن طريق وضع النتيجة في ملف eForth.mkb.
3.3.1 كلمات القولون: DOLST و EXIT
الموضوع المهم التالي بعد INEXT هو ما يفعله المترجم الداخلي عندما يصادف رمز كلمة محددة من خلال نقطتين. يحتوي حقل الرمز الخاص بهذه الكلمة على الرقم 2 ، لذلك ينقل INEXT التحكم إلى معالج DOLST ، الذي يقوم بالعمل الضروري لبدء ترجمة قائمة الرموز المميزة الجديدة.
DOLST: 6 2 F⟳ 7 6 F⟳ INEXT:
السجل 2 ، كما ناقشنا بالفعل (انظر 2.1) ، يحتوي على مؤشر مكدس إرجاع RP. أوامر IP6 KP2 تكتب قيمة R6 ، مؤشر التفسير (IP) ، إلى مكدس الإرجاع. سيساعد هذا لاحقًا على تذكر الموضع الحالي في القائمة القديمة للرموز ، حيث واجه INEXT كلمة النقطتين. الآن IP7 P6 يعيد ترتيب IP إلى بداية قائمة جديدة.
مباشرة بعد رمز DOLST ، يتم وضع رمز INEXT ، والذي سينفذ الكلمة الأولى من قائمة الرمز المميز الجديدة. كما هو الحال في أي مكان آخر ، تساعد أوامر F في الحفاظ على أهم عنصرين من مكدس البيانات.
عادةً ما تنتهي الكلمات النقطية برمز EXITT ، الذي يعمل عكس ذلك ، مقارنةً بـ DOLST - فهي تأخذ قيمة IP القديمة من رصة الإرجاع وتعود إلى تفسير قائمة الرموز القديمة.
EXITT: 02 6 x 1 2 + 2 F⟳ INEXT:
قراءة الأوامر RKIP02 P6 قيمة IP القديمة من الجزء العلوي من مكدس الإرجاع (انظر 2.1). بعد ذلك ، تقوم أوامر Cx 1 IP2 + P2 بتصحيح قيمة RP ، مما يزيدها واحدًا. يستعيد الأمر F⟳ المكدس ، وبعد ذلك ينفذ INEXT الكلمة التالية من قائمة الرموز القديمة.
بالطبع ، لا يمكن لـ INEXT الانتقال بعد DOLST وبعد الخروج في نفس الوقت. للقيام بذلك ، تقدمت بطلب خدعة قديمة من زمن الاتحاد السوفيتي. يمكنك أيضًا إتقانها عن طريق فحص الأسطر المقابلة في ملف eForth0.mkl.
3.3.2 DOVAR ، المتغير ومجموعة معالج
تستخدم الكلمات التي تم إنشاؤها بواسطة الكلمات CREATE و VARIABLE نفس معالج DOVAR. يدفع هذا المعالج على المكدس عنوان المتغير الموجود في حقل المعلمة ، والذي يذهب مباشرةً بعد بايت حقل الرمز. تشغل متغيرات VARIABLE 2 بايت ، وتحتوي الصفائف التي تم إنشاؤها باستخدام CREATE على العديد من البايتات التي يريدها المبرمج.
DOVAR: ⇔ 3 x 1 7 + 9
تقوم الأوامر ⇔ KP3 بحفظ محتويات السجل Y في رصة البيانات ، وفي الوقت نفسه ، يتم إدخال الرقم من أعلى الرصة في RY ، مما يحرر RX إلى القيمة الجديدة. بعد أوامر Cx 1 IP7 + ، تصبح هذه القيمة الجديدة في الجزء العلوي من المكدس عنوان حقل المعلمة للكلمة القابلة للتنفيذ. يقوم KBP9 بنقل التحكم إلى INEXT ، دون أي حيل ، والانتقال إلى الكلمة التالية.
3.3.3 معالجات ثابتة: DOCON و DOCONM
بخلاف DOVAR ، يصل
المعالج الثابت إلى حقل المعلمة الخاص بكلمته نفسها. يقرأ DOCON قيمة ثابتة 16 بت منه. هذه القيمة دائما إيجابية.
DOCON: ⇔ 3 ⇔ 7 5 x 256 5 × 5 + 9
أوامر ⇔ KP3 ⇔ حفظ RY في مكدس البيانات. ولكن هذه المرة ، يعود الجزء العلوي القديم من مكدس البيانات إلى RX. أوامر IP7 P5 تجبره على العودة إلى RY ، أثناء إعداد سجل المؤشر R5 لقراءة قيمة الثابت. بعد ذلك ، يستبدل Cx 256 البيانات المهملة في السجل X بالرقم 256.
تقرأ الآلات KIP5 × KIP5 + ثابتًا من حقل المعلمة إلى أعلى مكدس البيانات ، أي في RX. كما نتذكر ، في MK-161 البايت الأول هو دائما عالية. يتم ضربه بـ 256 ، وبعد ذلك يتم إضافة البايت الأقل أهمية من الثابت إلى المنتج. كل العمل يتم ، KBP9 ينقل التحكم إلى الكلمة التالية.
يعمل DOCONM بنفس الطريقة تمامًا ، فقط الإشارة الثابتة بعد قراءة التغييرات إلى العكس. يتم تطبيق الثوابت السلبية على MK-161 كمعالج منفصل من أجل السرعة:
DOCONM: ⇔ 3 ⇔ 7 5 x 256 5 × 5 + /-/ 9
لقد اكتشفنا الآن تمامًا كيف تنفذ eForth الكود الخاص بها على MK-161 Electronics من منطقة البيانات ، بل نتطرق إلى موضوع أعمق من سلسلة الأحرف (انظر 3.1.5).
في المقالة الثانية من السلسلة ، سأتحدث عن مترجم "النص" الخارجي 161e إلى الرابع ، وقم بتحليل بنية جداول الرأس والتعرف على الاسم. لقد طلب مني هذا الجزء من المترجم تطوير حلول أكثر تطرفًا ، على خلفية ما نوقش أعلاه هو الحصن التقليدي القديم والجيد.
سعيد فورت البرمجة!
أدب
- الدكتور تشن هانسون تينغ. eForth and Zen - الإصدار الثالث ، 2017. متوفر على Amazon Kindle.
- بارانوف إس إن ، نوزدرونوف ن. لغة الحصن وتنفيذه. - لام: الهندسة الميكانيكية. لينينغراد. القسم ، 1988.
- سيمينوف يو البرمجة بلغة FORT. - م: الراديو والاتصالات ، 1991.
- الجواب الرابع X3.215-1994. الترجمة .
- SP-Forth الوثائق .
- Offete Store (وقائع Dr. Chen-Hanson Ting) ، حيث يمكنك تنزيل 86eForth v5.2 لنظام Windows ، الوثائق باللغة الإنجليزية.
الرسوم التوضيحية الفيديو
يتم متابعة مقاطع الفيديو الأربعة 161 الصغيرة هذه. أول فيديو في بداية المقال.
الجزء 2 من 5. الاختبارات TEST-TEST4 من كتاب "eForth and Zen" ، الطبعة الثالثة ، على MK-161.
الجزء 3 من 5. انظر فك شفره.
الجزء 4 من 5. نقطة توقف BYE ، RS-232 محطة والوصول عن بعد إلى MK-161.
الجزء 5 من 5. الكلمات الختامية.