سؤال

أنا أعمل في مشروع أنظمة مضمنة وقد واجهت مشكلة تتعلق بدمج المترجم برمجيًا في Paradigm C++ IDE.أود أن أكون قادرًا على أتمتة البناء.

المعالج هو AMD186ES.أنا لا أعمل مع نظام التشغيل - فقط الأشياء المعدنية.أحتاج إلى إنشاء كود الجهاز 8086 16 بت في الوضع الحقيقي من C++.

يشير بحثي على Google إلى أن G++ يمكنه إنشاء مثل هذا الرمز.

أسئلتي هي:

هل يمكن تكوين g++ لبناء رمز الجهاز هذا؟

هل هناك مترجمين آخرين لـ C++ يمكنهم القيام بذلك أيضًا؟

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

المحلول

وأنا حاليا باستخدام as جنو (جزء من بينوتيلس والمجمع يستخدم لدول مجلس التعاون الخليجي)، ولقد تم بنجاح تجميع 16BIT رمز التجميع بما يلي:

as <file>
ld --oformat binary -Ttext 0x0 -e start <file>

ومع الملفات التجميع بلدي تبدأ مع:

.code16
.globl start
.text
start:

ومنذ ثنائي في سهل الاستغناء عن الخطوط،

.globl start
start:

وببساطة سوف تسفر عن تحذير، على الرغم من الثنائيات مسطحة لا تحتاج الى نقطة الدخول.


وشيء تعلمت بالطريقة الصعبة؛

-Ttext 0x0

وأمر بالغ الأهمية، وإلا يتم الضغط على شريحة .text خارج 16BIT معالجة مجموعة (لا تسألني لماذا)

وأنا شخصيا لا تزال التعلم التجمع، لذلك هذا هو مجرد طريقي، وليس بالضرورة أفضل وسيلة.


تعديل: إذا كنت تكتب رمز التمهيد، يجب تغيير

-Ttext 0x0

إلى

-Ttext 0x7c00

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

نصائح أخرى

وأفضل رهان هو على الارجح OpenWatcom ، والذي يتضمن مترجم C ++. العودة في 90s وأوائل إلى منتصف، وأعتقد أن هذا هو أفضل C / C ++ مترجم حولها. وكان مفتوح المصدر قبل بضع سنوات.

ألا يمتلك بائع الرقائق الخاص بك (AMD، على ما أعتقد) أي مؤشرات لمجمعي الرقائق؟

إذا لم يكن الأمر كذلك، فقد تتمكن من استخدام بعض برامج التحويل البرمجي لنظام DOS ذات 16 بت - ولكن سيكون لديك العديد من المشكلات الكبيرة المحتملة:

  1. الحصول على مكتبة للمترجم الذي لا يعتمد على BIOS أو MS-DOS
  2. تصحيح الأخطاء
  3. عادةً ما تتمتع روابط الأنظمة المدمجة بدعم محدد لتحديد موقع التعليمات البرمجية في مناطق ذاكرة معينة.لا يتم تضمين ذلك عادةً في برامج التحويل البرمجي لنظام DOS، ولكن قد تتمكن من العثور على نوع من الرابط/محدد الموقع الذي سيفي بالغرض نيابةً عنك.

هناك اثنين من المترجمين الذين لا يزالون مدعومين ويقومون بإنشاء كود 16 بت هما:

<وأ href = "http://www.google.co.uk/search؟hl=en&client=firefox-a&rls=org.mozilla٪3Aen-US٪3Aofficial&hs=woR&q=gcc+cross+compilation+for+ جزءا لا يتجزأ من + أنظمة وbtnG = بحث وميتا = "يختلط =" نوفولو noreferrer "> هذا البحث جوجل يظهر سلسلة من الروابط لوضع دول مجلس التعاون الخليجي على النحو مترجم الصليب. للحصول عليه لاستهداف شيء آخر غير ثنائي ELF القياسية يمكنك فريج الإخراج. هذا الرابط يناقش باستثناء المكتبات القياسية وتخصيص تنسيق الإخراج. قد تضطر إلى القيام ببعض تافه للحصول على عمل.

openwatcom.org لديه نسخة مفتوحة المصدر من WATCOM C مترجم، والتي قد تكون ايضا قادرة على فعل ما تريد.

الأحدث حسب عام 2014 هو ديف86.

يوجد تصحيح لـGCC 4.3: النهاية الخلفية الجديدة ia16:16 بت إنتل x86

و وهنا تحديث لذلك.لاحظ أنه ربما لا يعمل بشكل جيد، على سبيل المثال، يقول المنشور المحدث:"يتم الآن دعم المنشئين والمدمرين ، لكن لسبب ما لا يعملون إلا على تكوين Elks."

تحتوي حاوية Docker هذه على بناء منها: https://registry.hub.docker.com/u/ysangkok/ia16-gcc-rask

لم أتمكن من إنشاء ثنائيات DOS حتى الآن: كيف أقوم بتجميع مجموعة GAS وربطها بمكتبة Open Watcom C؟

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

ولست متأكدا ولكن أعتقد نسخة قديمة من بورلاند ج ++ كانت قادرة على فعل ذلك. يمكنك تحميل الإصدار 5.5 ر: هنا حظا سعيدا

لقد مضى وقت طويل منذ لقد ألقيت نظرة على النموذج الاشياء (هم تزال موجودة؟) - هل أنت متأكد من أنها لا تملك مكافئات سطر الأوامر للمترجم؟ ذاكرتي هو أنها بنيت على أعلى toolchain مترجم بورلاند ... ولذلك ربما يكون نسخة قديمة من المجمعين بورلاند قد تفعل خدعة؟

و- آه، وتبحث قليلا futher، أجد أن النموذج لا يزال حوالي (www.devtools.com) بيع أدوات X86. (يجب أن تكون بقرة حلوب!)

والمنتجات المهنية منها ويشمل البرمجة ... اعتمادا على مقدار العمل الذي تنوي القيام به، هو فقط قد يكون من المفيد لدغة الرصاص وشراء عروضها الكامل ...

وحظا سعيدا.

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