Question

Je travaille sur un projet de systèmes embarqués et je suis confronté à un problème d'intégration du programme dans le compilateur dans l'EDI Paradigm C ++. J'aimerais pouvoir automatiser la construction.

Le processeur est l’AMD186ES. Je ne travaille pas avec le système d’exploitation, mais uniquement avec des éléments de base. J'ai besoin de générer du code machine 8086 16 bits en mode réel à partir de C ++.

Ma recherche sur Google indique que G ++ peut créer un tel code.

Mes questions sont les suivantes:

Peut-on configurer g ++ pour générer ce code machine?

Existe-t-il d'autres compilateurs C ++ qui peuvent également le faire?

Était-ce utile?

La solution

J'utilise actuellement gnu en tant que (une partie de binutils et de l'assembleur utilisé pour gcc) et j'ai correctement assemblé du code d'assemblage 16 bits avec les éléments suivants:

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

avec mes fichiers d'assemblage commençant par:

.code16
.globl start
.text
start:

depuis sa binaire simple omettant les lignes,

.globl start
start:

donnera simplement un avertissement, même si les fichiers binaires à plat ne nécessitent aucun point d'entrée.

quelque chose que j'ai appris à la dure;

-Ttext 0x0

est critique, sinon le segment .text est poussé en dehors de la plage d'adressage 16 bits (ne me demandez pas pourquoi)

Personnellement, je suis encore en train d'apprendre l'assemblage, ce n'est donc que ma façon, pas nécessairement la meilleure.

MODIFIER: si vous écrivez du code de démarrage, vous devez modifier

.
-Ttext 0x7c00

à

<*>

Ceci compensera vos adresses de mémoire de 0x7c00 car le code de démarrage est généralement chargé à 0x7c00 par le BIOS.

Autres conseils

Votre meilleur pari est probablement OpenWatcom , qui inclut un compilateur C ++. Retour au début des années 90, je pense que c'était le meilleur compilateur C / C ++ du moment. Il était open-source il y a quelques années.

Votre fournisseur de puces (AMD, je suppose) n’a-t-il aucune indication sur les compilateurs pour la puce?

Sinon, vous pourrez peut-être utiliser certains compilateurs DOS 16 bits, mais vous aurez plusieurs gros problèmes potentiels:

  1. obtenir une bibliothèque pour le compilateur qui ne dépend pas du BIOS ou de MS-DOS
  2. débogage
  3. Les lieurs
  4. pour les systèmes intégrés prennent généralement en charge de manière spécifique la localisation du code dans des régions de mémoire spécifiques. Cela n’est généralement pas inclus dans les compilateurs pour DOS, mais vous pourrez peut-être trouver une sorte d’éditeur de liens / localisateur qui fera le tour pour vous.

Quelques compilateurs toujours pris en charge et générant du code 16 bits sont:

Cette recherche google montre une série de liens permettant de définir gcc comme compilateur croisé. Pour le faire cibler autre chose qu'un binaire ELF standard, vous pouvez transférer la sortie. Ce lien traite de l’exclusion des bibliothèques standard et de la personnalisation du format de sortie. Vous devrez peut-être jouer du violon pour que cela fonctionne.

Alternativement, openwatcom.org dispose d'une version open source du Watcom C compilateur, qui pourrait également faire ce que vous voulez.

La plus récente en 2014 est la Dev86 .

Il existe un correctif pour GCC 4.3: Nouveau back-end ia16: Intel x86 16 bits

Et voici une mise à jour pour cela . Notez que cela ne fonctionne probablement pas très bien. Par exemple, le message mis à jour indique: "Les constructeurs et les destructeurs sont désormais pris en charge, mais pour une raison quelconque, ils   ne fonctionne que sur la configuration des élans. "

Ce conteneur Docker en a une version: https: // registry.hub.docker.com/u/ysangkok/ia16-gcc-rask

Je n'ai pas encore réussi à créer des binaires DOS: Comment puis-je assembler l’assemblage GAS et le lier à la bibliothèque Open Watcom C?

Consultez bcc , qui est un compilateur x86 en C 16 bits. Par exemple, il existe également des paquets Debian .

Pas sûr, mais je pense que l'ancienne version de Borland c ++ était capable de le faire. vous pouvez télécharger la version 5.5: ici bonne chance

Cela fait longtemps que je n’ai pas jeté un œil à Paradigm (sont-ils toujours là?) - êtes-vous sûr qu’ils n’ont pas d’équivalent en ligne de commande pour le compilateur? Si je me souviens bien, ils ont été construits sur la chaîne d'outils du compilateur de Borland ... Alors peut-être qu'une ancienne copie des compilateurs de Borland pourrait faire l'affaire?

- Ah, en regardant un peu plus loin, je trouve que Paradigm vend toujours des outils X86 (www.devtools.com). (Doit être une vache à lait!)

Leur produit professionnel inclut des scripts ... En fonction de la quantité de travail que vous envisagez de faire, cela vaut peut-être la peine de mordre la balle et d’acheter leur offre complète ...

Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top