2010-01-26 19 views

Répondre

13

Un Master Boot Record est composée de 512 octets, les deux derniers octets doivent être 0x55 0xAA. Il reste 510 octets, les entrées de la table de partition sont de 16 octets, au maximum 4 entrées de la table de partition, soit 64 octets. Here est ce à quoi ressemble une entrée de partition.

Il ne reste que 446 octets de code assembleur. Habituellement, les premiers octets sont constitués d'un enregistrement d'identificateur de démarrage, décrivant les données de disque du chargeur de démarrage, comme l'identifiant, l'ID système, pour n'en citer que quelques-uns, puis le BIOS attend le code de démarrage à 0x000: 0x07C00. dans le segment de la mémoire. Voir here pour un exemple de tutoriel sur les chargeurs de démarrage. Il y a un aperçu technique détaillé sur WikiBooks à ce sujet here. La seule chose à laquelle vous devez faire attention, c'est que le code du bootloader ne doit pas dépasser 446 octets sinon les tables de partition seront vissées et donc le message d'erreur du BIOS 'Error. Système d'exploitation manquant »ou similaire!

Rédaction du secteur d'amorçage compilé binaire sur le disque impliquerait une façon désordonnée et dangereuse de visser le plus souvent l'ordinateur, sous Linux, la commande serait similaire à:

 
# Assume that /dev/hda1 is the first hard disk then... 
dd if=mybootldr.bin of=/dev/hda1 bs=512 cnt=1 

L'autre façon consiste à utiliser un faible programme d'éditeur de disque de niveau ou même en utilisant le vieux DEBUG.EXE ordinaire (trouvé sur les vieilles disquettes MSDOS) ou même en utilisant FreeDos.

 
C:\DEBUG.EXE mybootldr.bin 
-W 100 0 0 1 
-Q 

Si je me souviens, DR.DOS (Digital DOS Research) un rival à MS-DOS, utilisé une protection par mot de passe sur le code du chargeur de démarrage avant le démarrage du DR-DOS vers le haut.

Edit: Si vous êtes vraiment curieux, à la façon dont le BIOS cherche 0x0000: 0x7c00, jetez un oeil à ce lien où vous pouvez télécharger l'original du code du BIOS IBM XT here.

Espérons que cela aide, Cordialement, Tom.

+0

+1 pour "doit être 0x55 0xAA" et ne dit pas le nombre magique – stacker

+0

@Stacker: J'ai édité la réponse pour inclure un lien vers le code original du BIOS ... – t0mm13b

+0

@tommieb ne pas être avare^ – stacker

3

L'amour de ces anciens sujets de l'école ;-)

ici sont deux assembleur listings parce que vous demandez explicit assembly instructions

+0

Ces sujets de la vieille école ne sont jamais ennuyeux! ;) – t0mm13b

+0

De rien! :);) Gardez ces sujets old school en vie hein! – t0mm13b

2

Voici un playable Tetris game écrit dans l'assemblage, et qui se loge dans un secteur de démarrage x86. J'ai vu une variante de ceci qui amorcerait votre OS normal seulement si vous pourriez compléter dix lignes.

+0

C'est génial. :RÉ – iokevins