هل لغة التجميع `التجميع" محددة أيضًا؟ ما هو الأفضل؟

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

  •  22-09-2019
  •  | 
  •  

سؤال

أنا أتعلم لغة التجميع. لقد بدأت مع بول أ. كارتر PC Assembly Language الذي يستخدم NASM (المجمع على مستوى الشبكة). ثم في المنتصف تحولت وبدأت القراءة Introduction to 80×86 Assembly Language and Computer Architecture الذي يستخدم Masm.

في Nasm اعتدت أن أكتب ، لتهيئة بايت

DB 110101B

في Masm أنا أستخدم

بايت 110101B

أنا في منتصف القراءة. نظرًا لأن هذه توجيهات التجميع ستكون مختلفة لكل تجميع. الصحيح؟ ألا يتبع مطورو التجميع هؤلاء المعيار لهذه التوجيهات؟ لأنهم يعلمون أن Mnemonics هي وحدة المعالجة المركزية محددة. لذلك ، ألم في الحمار للتعلم والرمز في لغة التجميع.

الآن إذا اتبعوا توجيهات مختلفة ، فإن ألمًا أكبر إذا قمت بتغيير المجمع أو إذا قمت بتبديل نظام التشغيل (Masm Developer في مشكلة عميقة إذا ذهب إلى Linux).

ارتباك هو هل يجب أن أتعرف على NASM أو MASM؟ أنا من محبي Windows ولكن قد أضطر إلى العمل (في المستقبل) على Linux أيضًا.

يجب أن يكون كل كتاب بعنوان "_________ لغة التجميع باستخدام __________ Assembler"

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

المحلول

لسوء الحظ ، لم يكن هناك معيار للغة التجميع. سيكون عليك فقط تعلم التوجيهات التي يدعمها المجمع الخاص بك. لحسن الحظ ، فإن معظم التوجيهات ، بينما يكون لها أسماء مختلفة ، متشابهة بشكل دلالي مثل DB و Byte.

لكن انتظر! يزداد الأمر سوءًا ، خاصة بالنسبة لـ X86. لديك (على الأقل) نموذجين من التعليمات البرمجية التي يمكن للمجمعات قبولها: تنسيق Intel و AT&T. يعكس تنسيق AT&T ترتيب معظم المعاملات إلى التعليمات (أم أنه Visa بالعكس ؛-).

ربما يكون NASM خيارًا أفضل لقابلية النقل ، ولكن يمكنك أيضًا النظر إلى مجموعة GNU ..

نصائح أخرى

بناء جملة Intel / AT&T

مع X86 على وجه الخصوص ، كانت المتجمعات الأولى من Intel ثم مجموعة متوافقة إلى حد كبير من Microsoft شكلت فرعًا واحدًا.

ينظم هؤلاء المجمعون معاملات المصدر والوجهة من اليمين إلى اليسار ولديها طبقة تجريبية غير عادية (وعلى عيني ، نوع من الغضب) تستخدم ذكريات واحدة لـ 8 و 16 و 32 بت ، ثم تستمد رمز الجهاز الفعلي للاستخدام بناء على خصائص المعامل. توجد المعدلات (على المعاملات) لإجبار حجم معين.

لكن يونيكس كان مهمًا أيضًا وكان لديه خط تجميع مختلف تمامًا مع تقاليد واتفاقيات مختلفة.

كان بائع UNIX الأصلي AT&T ، الذي يمتلك الملكية الفكرية التي تم تطويرها في Bell Labs. سلسلة من مشاريع BSD ثم واصل Linux مع هذا التقليد. يعالج هؤلاء المجمعون تاريخياً من المعاملات من اليسار إلى اليمين ، وله تصميم احتياطي محسن للسرعة ، وعندما يستخدمهم البشر بشكل عام ، فإنهم يستخدمون عمومًا CPP لأجهزة الماكرو والشرطي ، حتى لو كان لدى المجمع ميزات متوازية أيضًا.

في هذه الأيام ، ربما تستخدم VS on MS أو GNU على Linux أو Mac ، ولكن هذا هو السبب في أننا ما زلنا نقول AT&T vs Intel. لدى Assembler GNU خيار لتجميع الاتجاهين ، على الرغم من أنه لا يزال في معسكر AT&T.

عموما نعم. إنها في الغالب متوافقة مع الميزة ، لذا فإن التحويل من بناء جملة مجمع إلى آخر لا يكون أمرًا صعبًا بشكل رهيب إذا كنت تعرف كليهما.

يتم توثيق المعالجات جميعها في دليل مرجعي يتم توفيره. عادةً ما تم تطوير هذا إلى بناء الجملة المعياري (جنبًا إلى جنب مع المجمع الذي يوفره البائع) لبرامج التجميع على منصة معينة. وبالتالي ، فإن العديد من المعالجات من بائع واحد لديهم بناء جملة مماثلة.

أصبح الموقف أكثر تعقيدًا مع المصادر الثانية للمعالجات والتطوير النهائي لمجمعات متعددة المستهدفين الذين يستخدمون ، لأسباب تاريخية ، في الغالب بناء جملة متسقة عبر جميع المنصات. يوفر هذا أيضًا بعض المزايا القابلة للجدل عند نقل التعليمات البرمجية عبر المنصات.

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

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