سؤال
أنا أعمل على جهاز محاكاة msp430 مجموعة التعليمات.غنو المجمع سوف تتيح لك ترميز تعليمات مثل هذه:
fc0a: 12 10 00 02 rrc &0x0200
fc0e: 22 11 rra #4
fc10: 23 52 add #4,#2
تخميني هو أن rrc &0x0200 سوف تجلب من عنوان 0x0200 أداء تدوير ثم كتابة الإجابة مرة أخرى إلى عنوان 0x0200, صحيح ؟ ولكن ما أن rra #4 أفعل ؟ المصدر سيكون فوري 4 أفترض ولكن هناك وجهة بعد العملية ؟ إضافة #4,#2 تجميعها في ما كنت تتوقع (كما 2b10 المصدر = r2, ad = 1b0, dest = r3) ، binutils المجمع على الرغم من لا تعرف ماذا تفعل مع هذه التعليمات.
هل هذه صحيحة التعليمات ؟
المحلول
على الرغم من أن هناك لا يبدو أن يكون أي نهائي على الانترنت الإشارة إلى هذا التأثير ، أنا أتفق مع المرجع أن اثنين من الإرشادات التي تظهر (وآخرون) ومن المرجح ليست صالحة, ، على الرغم من أنها تتفق مع الصيغة المحددة في ورقة البيانات.
وبعبارة أخرى, ليس كل مزيج ممكن من الأجزاء المختلفة التي تشكل تعليمات كلمة صالحة.ولا سيما أن العديد المعامل تعليمات الاستخدام الفوري في معالجة الوضع ، والعديد من ضعف المعامل التعليمات التي فوري لمعالجة الوضع الوجهة ربما لا لغويا قابلا للتطبيق.
هناك فقط بضعة تلميحات إلى هذا التأثير في الوثائق ، على سبيل المثال ، في دليل المستخدم ، القسم 3.3.7 (الفوري في معالجة الوضع) ، تعليق يشير "صالحة فقط لمدة مصدر المعامل."(و للمعلومية هذا هو لجميع الحالات العاجلة لمعالجة الوضع ، ليس فقط على المدى القصير اليد الحالات التي يسمح بها R2 أو R3 المستمر الجيل خدعة.)
حقيقة أن المجمع لا تعرف ماذا تفعل مع مثل هذه الرموز أيضا تلميح آخر (على الرغم من أن...بعض disassemblers الحصول على تعثرت بسهولة...).
من أجل التوثيق جمعت أدناه بعض المراجع المفيدة عن MSP430:
- TI MSP430 دليل المستخدم (pdf) الفصل 3 هو ذات الصلة ولا سيما
- TI MSP430 متحكم (pdf) أقصر عامة (11 صفحة)
- MSPGCC دليل جنو ميناء منظمة الشفافية الدولية أدوات MSP430 ميكروكنترولر.
نصائح أخرى
في دليل المستخدمين الحاليين، في القسم 3.4.4.2، فإنه لا يوصي باستخدام وضع الفوري (N) في حقل الوجهة لRRA الأمر كما أنه يؤدي إلى "عملية البرنامج لا يمكن التنبؤ بها."
ومن الممكن هم. وعند النظر إلى مجموعة التعليمات على ويكيبيديا، أكواد العمليات ترميز السجل وخيارات مختلفة. لذلك ليست رسم بسيط. يبدو أن الانتاج كنت قد حصلت هو Endian طفيف، لذلك هذا:
fc0a: 12 10 00 02 rrc &0x0200
ويتوافق مع تعليمات 1012، والتي في ثنائي هو 0001 0000 0001 0010.
وهذا ينهار كما يلي:
6 bits: 0001 00 - fixed; defines the instruction family
3 bits: 00 0 - instruction (RRC)
1 bit : 0 - byte or word parameter (0 = 16 bit parameter; 1 = 8 bit)
2 bits: 01 - addressing mode (01 = indexed;)
4 bits: 0010 - register
وحتى في هذه الحالة تدوير اليمين والتي تحدث في القيمة عند الإزاحة في سجل 2 من عنوان & 0200.
وأنت كنت بحاجة لكسر تعليمات أخرى إلى أسفل بطريقة مشابهة لنفهم تماما. لتعليم ضيف، كل من سجلات المصدر والوجهة / يتم ترميز العناوين في 5223 التعليمات.