[MASM] Création de fichier COM (secteur de boot) - Résolu !

Bonjour,

C’est une question sans doute très bête mais je n’ai pas trouvé de réponse à cette question malgré un bonne journée de recherche. Comment crée-t-on un fichier COM avec MASM?

J’ai envie de faire un petite bout de code en assembleur qui affiche un petit message lors du démarrage de mon PC mais je ne trouve pas comment compiler mon code… Il n’y a pas d’option “COM File” sur le linker de MASM, je reçoit toujours un fichier EXE (16 ou 32 bits).

C’est quand même dommage, j’ai lu 500 pages sur la programmation en assembleur mais je sais quand même pas faire ça :pfff: (la théorie ne remplace pas la pratique)

Es-ce qu’une personne charitable pourrait me débloquer?

Merci d’avance

De mémoire, il faut masm 6.0 et < pour produire un binaire 16 bits msdos car le mode 16 bits produit par les versions supérieurs est en mode thunk, c’est à dire 16 bits mais en mode protégé (windows 3.1).

C’est marqué que j’ai la version 6.14 de MASM. Es-ce que 6.14 <= 6.0 :paf: (je veux dire par là: c’est à peu près la même chose pourtant)

EDIT: Es-ce qu’il y a une différence entre un fichier objet qui sera contenu plus tard dans un fichier COM et un autre qui est destiné à être dans un executable Win32 ?
Ou c’est juste au niveau du liage des fichiers objets que la différence se produit?
Parce que sinon je pourrais utiliser ALINK???

Un .COM n’est qu’une extension, renomme n’importe quel exe windows en .COM et tu verras qu’il se lancera quand donc tout se fait lors du linkage lors de la production du binaire à générer dans le bon format et/ou de la directive .386 après .MODEL

Oui mais il y a aussi un header pour un fichier COM (le DOS-Stub?). Sous NASM on peut demander une sortie binaire, mais sous MASM je ne trouve pas…

Il y a un utilitaire nommé EXE2BIN qui parait intéressant mais je n’arrive pas à le faire fonctionner.

euh pas sûr, là j’ai un doute, les COM sont prévus pour se charger dans un segment de 64 Ko uniquement (là je suis sûr). et il me semble que pour ça les entêtes de chargement destinés à la relocation des pointeurs sont simplifiés dans le com donc différent.

il n’y avait pas un EXE2BIN qui se chargeait de transformer les exe, je m’en était servi justement pour faire un boot qui tient sur un seul secteur.

OK,

Bon j’ai trouvé comment faire ce que je désirait. Alors une petite explication si une autre personne est confrontée au même problème que le mien.

Alors premièrement: Le header marqué “MZ” au début d’un fichier signifie que c’est un exécutable (16/23 bits). Les fichiers COM sont des fichiers “brutes”, il ne comprennent qu’un bloc de 64Ko avec un mélange de code/donnée/pile à l’intérieur (comme l’a dit deltree).

Je n’ai pas trouvé la façon de faire un fichier COM avec MASM (si quelqu’un à une idée :sol: ?). Pour pouvoir quand même récupérer un petit programme nommé “EXE2BIN” ou “EXE2COM” qui permet de prendre un exécutable 16 bits et d’en faire un fichier COM “pur” (sans le header des exes).

Avec NASM c’est beaucoup plus simple puisqu’il faut simplement demander une sortie binaire (bin).

Note importante: il ne faut pas demander de pile dans le fichier assembleur, sinon EXE2BIN ne fonctionnera pas (puisqu’il n’y a pas de segment multiples dans un fichier COM). C’est stupide de le faire mais j’ai quand même réussi :lol: .

Et pour poser un exécutable “brute” sur une disquette: http://uranus.it.swin.edu.au/~jn/linux/rawwrite.htm
Ou on peut utiliser VMWare ou VirtualPC et pointer sur le fichier binaire que l’on aura renommer en “.img” auparavant.

Merci à tous de m’avoir aidé.

Je n’avais pas fait attention au prog que tu voulais compiler mais si c’est juste pour apprendre à programmer sous msdos, je te conseille plutôt de passer par djgpp qui a été pensé pour ça, il utilise son assembleur mais dans l’aide, les modifications ont l’air mineures.

En faite j’ai commencé à apprendre l’assembleur de façon un peu spéciale… Mon but premier est d’apprendre l’assembleur avec Win32 mais aussi à essayé de faire une toute petite base d’OS (juste quelques routines) pour pouvoir dire: JE L’AI FAIT :lol:

J’ai commencé sur NASM (que je trouve sympathique). J’ai lu tout le tutoriel produit par les concepteurs de cet assembleur. Mais je le trouve assez compliqué par endroit.
Puis j’ai acheté un gros livre sur l’assembleur qui se base sur MASM pour enseigner toutes les instructions x86, ainsi que les macros de MASM (c’est un assembleur très utilisé non?).

Et maintenant je constate que MASM est un peu une usine à gaz, avec beaucoup trop de spécialité.

Es-ce qu’il existe un assembleur qui soit “compatible” avec ce que j’ai appris avec MASM mais qui soit un peu moins usine à gaz?

Si c’est pour coder un OS, j’ai justement ce qu’il te faut, ici[/url], en particulier ce [url=http://sos.enix.org/wiki-fr/upload/SOSDownload/sos-texte-art1.pdf]pdf, tu devrais t’en sortir sans problème :wink:

Je suis sûr que je ne ferai que ébaucher quelques ligne de code que j’appellerai fièrement un “OS”. Mais ça ne fait rien, c’est l’envie de comprendre “comment ça marche” qui me pousse à faire ça. Et concernant ton lien/pdf que tu m’as donné je te remercie infiniment.

Et si il y en a d’autre, comme moi, qui trouve intéressant de fouiller dans ce plat de spaghetti appelé communément OS, je leur conseil ces livres:

“Systèmes d’exploitation” de Andrew Tanenbaum
“Operating Systems Design And Implementation” aussi de Andrew Tanenbaum

Même si il peuvent paraitre cher, ils sont extrêmement instructifs et contiennent une quantité inestimable d’information.

Et sinon il y a aussi la doc sur le kernel de linux (qui me parait digne d’intérêt): http://en.tldp.org/LDP/tlk/tlk.html

EDIT: j’ai aussi trouvé: ceci sur la façon de communiquer avec différents périphériques (je trouve ça un peu trop technique pour moi).

Je connais ces bouquins, respect à Andrew Tanenbaum … ca me fait rappeler les longs débats que j’ai vu sur la mailing liste entre lui et un certain Linus sur leur façon de voir la programmation monolithique ou pas d’un OS, c’est sûr qu’ils redeviendront pas copain de sitôt ces deux la :stuck_out_tongue:

Ah tient, je l’avais pas celui la, hop, “push dword [v_favoris]”, merci :slight_smile:

Oui en effet, ça m’a étonné de voir comme il descend l’architecture monolithique dans son bouquin… Ca m’a presque étonné (les personnes ayant écrit l’article sur les noyaux sur Wikipédia m’ont l’air bien moins négatif pour ce genre d’architecture).