2010-06-28 7 views
2

Je suis en train de créer un chargeur de démarrage qui démarre le contenu situé sur la partie 1000h de la disquette. Je le faisais en utilisant Fasm (parce que mon ami utilise seulement Fasm, et il m'aidait avec cela), mais je préfère utiliser Nasm, et maintenant j'ai des problèmes avec la syntaxe, alors je veux savoir comment pourrais-je faire ceci dans Nasm:Mise en place de deux ORG ensemble

org 7C00h 
    %include "boot.asm" 

org 1000h 
    %include "kernel.asm" 

PS: Je l'ai déjà mis la directive %include en utilisant le style Nasm-syntaxe, sur Fasm il doit être juste include.

Répondre

4

Voir here pour la description de votre problème ou ce que je pense est car il est un peu difficile de dire de la question. Il est une bonne idée pour poster des questions avec « Je vais avoir des problèmes avec la syntaxe » pour montrer réellement ce que le problème de syntaxe est :-)

Voir here pour la solution (mais il ne fonctionne pas, voir ci-dessous) . Fondamentalement, l'instruction org dans NASM est destinée à définir l'adresse de base de la section et ne peut pas être utilisée pour insérer arbitrairement des octets dans le flux. Il suggère que vous utilisiez quelque chose comme:

org 1000h 
%include "kernel.asm" 
times 7c00h-($-$$) db 0 ; pad it out with zero bytes 
%include "boot.asm" 

Cependant, avez-vous pensé à ce que vous essayez de faire. Si vous créez un fichier binaire à charger dans la mémoire, je ne pense pas que vous vouliez à la fois le secteur de démarrage et le noyau dans un seul fichier.

Le BIOS voudra charger votre secteur de démarrage en un seul morceau à 7c00: 0 et sera presque certainement confus quand il a le noyau au début de ce morceau. Je pense que ce que vous devrez faire est de créer deux fichiers binaires plats totalement séparés, un pour le secteur de démarrage et un autre pour le noyau. Le BIOS chargera votre secteur de démarrage, votre secteur de démarrage chargera votre noyau.

Ensuite, vous pouvez mettre l'instruction org pertinente dans les deux fichiers source et votre problème devrait être résolu.

1

La réponse simple est que cela ne peut pas être fait dans NASM. L'instruction org fonctionne de la même manière dans FASM que dans NASM mais différemment dans MASM. Dans NASM, le code d'exemple doit être assemblé séparément, puis combiné pour créer l'image finale.

La réponse heureuse est que c'est rare (et probablement seulement) cas où le code avec différentes adresses de départ doit être combiné (avec NASM) ou assemblés (avec FASM) en une seule image. Le secteur de démarrage est transféré au 7C00h par le BIOS. Il est immédiatement suivi sur le média (disquette, disque dur, clé USB) par la charge utile qui est transférée à son adresse de départ par le secteur de démarrage - chargeur de démarrage.