Je veux compiler ce code source sous Windows (il suffit d'un exemple): Lorsque je le compile avec NASM ou FASM, la longueur du fichier de sortie est de 2 octets. Mais lorsque je le compile avec l'assembleur GNU (AS), la longueur du fichier de sortie est de 292 octets! P> Comment compiler un fichier d'assemblage à un format binaire brut (comme DOS .com) avec GNU Assembler (AS)? p> Pourquoi je fais cela? P> Je veux écrire mon propre système d'exploitation simple, j'écris mes codes avec C (sans utiliser de notes de notes C Même Stdia.h ou mathématiques .h) et le convertir à l'assemblage: p>
as my_os.asm
3 Réponses :
Utilisez le nab avec l'option -f bin code> pour compiler votre code d'assemblage dans un fichier binaire brut. P>
Mais NasM ne peut pas compiler la sortie de montage de GCC (voir gcc -s my_os.c -o my_os.asm -masm = Intel code>)
D'autre part, GCC ne génère pas de code de 16 bits dont vous avez besoin parce que votre secteur de démarrage commence à exécuter en mode 16 bits. Toutes les manipulations de pointeur / adresse du code C compilée pour le mode 32 bits seront incorrectes en mode 16 bits.
Downvoter, soyez plus constructif.
@alex L'affiche utilise évidemment l'assembleur de gaz, pas NasM. Donc, votre réponse n'est pas vraiment une réponse du tout.
@HAWKEN: IIRC, (g) Comme ne produit des fichiers binaires plats / cris. Voulons-nous une solution impossible?
pour tests rapides et sales que vous pouvez faire: p> donne : p> malheureusement, cela donne un avertissement: p> qui n'a pas beaucoup de sens avec et: p> ou simplement avec: p> qui indique Si vous allez à quelque chose de plus grave, la meilleure méthode consiste à générer un script de liaison minimal propre. ici, nous placons également les octets magiques avec le script de liaison. p> Le script de liaison est important. avant tout pour contrôler les adresses de sortie après la relocalisation. En savoir plus sur la relocalisation à: https://stackoverflow.com/a/30507725/895245 P> Utilisez-le comme suit: p> et ensuite vous pouvez démarrer comme: p> exemples de travail sur ce référentiel: Testé sur Binutils 2.24, Ubuntu 14.04. P> P> ld -oformat binaire code> strong>
binaire code>. Il pourrait être réduit de silence avec: p>
ld code> que le point d'entrée n'est pas
_start code> mais le code à l'adresse
0 p> << p> Il est dommage que ni
comme code> ni
ld code> ne puisse pas entrer / output à partir de stdin / stdout, donc pas de tuyauterie. P>
linker.ld code>: p>
fasm yourcode.asm targetfilename.com
La question dit déjà "lorsque je le compile avec NASM ou FASM, la longueur du fichier de sortie est de 2 octets". Ce n'est pas une réponse à cette question i>, qui concerne le gaz.
Je vois, mais je ne comprends pas pourquoi doit-être utiliser un autre compilateur lorsque FASM produira le résultat correct.
C'était déjà Débattre dans les commentaires sous the nasm -f bac code> réponse (qui est la même réponse que celle-ci). Vraisemblablement, ils veulent utiliser la syntaxe de gaz, pas NasM ou FASM, pour une raison quelconque. Ou il semble que la question ait pu venir de l'impression erronée que vous pouvez utilement utiliser cela avec
gcc -s code> de sortie pour créer un code 16 bits.
Peut-être que vous pouvez commencer par écrire votre propre assembleur :) Je suppose que les octets "290" que vous consultent sont à partir de l'en-tête de fichier: chaque fichier d'objet binaire en a une d'entre elles.
@ Paulsm4: Oui! 290 octets d'en-tête mais je ne veux pas d'en-tête!
@AMIR - Vous ne pouvez pas simplement utiliser
objcopy code> ou
segedit code> ou quelque chose pour copier les parties binaires que vous aimez?
@Cirosanttilli 疆疆 中心 996icu 六四 事件: Devrait-il être fermé comme un duplicata de Comment générer des fichiers binaires simples comme NasM -F bin avec l'assembleur de gaz GNU? ?
@Petercordes Oui, c'est ce que j'ai dit il y a 5 ans sur mon commentaire précédent :-)
@Cirosantilli 疆疆 中心 996icu 六四 事件: Je vous demandais si cela était toujours précis, car vous avez une réponse sur les deux questions que vous avez mises à jour depuis lors.
@Petercordes j'ai besoin d'obtenir une de ces diploises de montage XD
@Cirosantilli 疆疆 中心 996icu 六四 六四: Certaines de vos réponses de mon assemblée semblent être sous un 2ème compte. La fusionner pourrait aider.
@Petercordes C'est bon, j'ai besoin d'une marionnette "politiquement amorale" pour des raisons :-)