كتابة مجمع Z80 - Lexing ASM وبناء شجرة تحليل باستخدام التركيب؟

StackOverflow https://stackoverflow.com/questions/1305091

سؤال

أنا جديد جدا على مفهوم كتابة مجمع وحتى بعد قراءة قدر كبير من المواد، ما زلت أواجه صعوبات في التفاف رأسي حول اثنين من المفاهيم.

  1. ما هي العملية لتفكيك ملف المصدر فعليا في الرموز؟ أعتقد أن هذه العملية تسمى Lexing، وقد بحثت مرتفعة ومنخفضة للحصول على أمثلة شفرة حقيقية منطقية، لكنني لا أستطيع أن أجد شيئا ما أمثلة شفرة بسيطة موضع ترحيب كبير؛)

  2. عند التحليل، هل تحتاج المعلومات إلى أعلى أو أسفل الشجرة؟ السبب في أنني أسأل هو كما يلي، تأخذ:

    LD BC، NN

يجب أن تتحول إلى شجرة التحليل التالية بمجرد التمييز (؟؟؟)

  ___ LD ___
  |        |
 BC        nn

الآن، عندما يتم اجتياز هذه الشجرة، يحتاج إلى إنتاج رمز الجهاز التالي:

01 n n

إذا كانت التعليمات:

LD DE,nn

ثم سيحتاج الإخراج إلى أن يكون:

11 n n

بمعنى أنه يثير السؤال، هل تعيد عقدة LD شيئا مختلفا بناء على المعامل أم هو المعامل الذي يعيد شيئا ما؟ وكيف يتم تحقيق هذا؟ أكثر أمثلة التعليمات البرمجية البسيطة سيكون ممتازا إذا سمح الوقت.

أنا مهتم بأكثر من تعلم بعض العمليات الخام هنا بدلا من النظر إلى الأدوات الحالية المتقدمة، لذا يرجى وضع ذلك في الاعتبار قبل إرسال لي إلى إكاك أو ثني.

هل كانت مفيدة؟

المحلول

حسنا، إن بنية الشجرة التي تريدها حقا لتعليمات تعمل على سجل ووضع معالجة الذاكرة تتضمن إزاحة إزاحة وسجل فهرس يبدو أن هذا:

    INSTRUCTION-----+
    |      |        |
  OPCODE  REG     OPERAND
                  |     |
                OFFSET  INDEXREG

ونعم، تريد أن ترغب في تمرير القيم لأعلى ولأسفل الشجرة. يطلق على طريقة لتحديد هذه الأمور رسميا مثل "قواعد الأسمين"، وأنت تزيين قواعد اللغة ل Langauge الخاص بك (في علاقتك، بناء جملة المجمع الخاص بك) مع مرور القيمة والحسابات على هذه القيم. لمزيد من الخلفية، انظر ويكيبيديا على أسماء النحو.

في سؤال ذات صلة, لقد ناقشت أداة، DMS، الذي يتعامل مع تعبيرات النحوية وأشجار المبنى. كأداة معالجة اللغة، تواجه DMS بالضبط هذه نفسها من مشكلات تزواد معلومات الأشجار. لا ينبغي أن يفاجئك، أنه كأداة معالجة اللغة الراقية، يمكنها التعامل مع حسابات القواعد السمة مباشرة.

نصائح أخرى

ليس من الضروري بناء شجرة تحليل. رموز Z80 OP بسيطة للغاية. وهي تتألف من رمز المرجع و 0 أو 1 أو 2 المعاملات، مفصولة بفواصل. تحتاج فقط إلى تقسيم Opcode إلى مكونات (بحد أقصى 3) مع محلل بسيط للغاية - لا توجد هناك حاجة إلى شجرة.

في الواقع، فإن Opcodes لا تحتوي على قاعدة بايت، ولكن قاعدة ثماني. أفضل وصف أعرفه هو فك تشفير z80 opcodes..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top