2012-09-14 11 views
0

à l'aide de quelques tutoriels, j'ai écrit un petit morceau de code, pour m'exposer une chaîne, après avoir démarré depuis ma disquette.assembleur - compréhension de certaines lignes

mon problème est maintenant, qui ne comprends pas certaines lignes, j'espère que vous pouvez m'aider, ou dites-moi simplement, si je suis juste.

code:

mov ax, 07C0h 
add ax, 288   ; (512 + 4096)/16 = 288 
mov ss, ax 
mov sp, 4096 

mov ax, 07C0h 
mov ds, ax 
  1. ligne: (ce que je pourrais changer cela) démarrer le programme @ l'adresse 07C0h
  2. Ajouter une place pour 288 points à la hache
  3. ?
  4. Espace de 4096 octets pour mon programme (pour stocker des variables et des choses?)
  5. Aller à l'adresse de départ
  6. ?

merci pour votre aide.

+0

Google "dos bootstrap loader". –

Répondre

4
mov ax, 07C0h 
add ax, 288   ; (512 + 4096)/16 = 288 
mov ss, ax 

Cela met le début du segment de pile (ss) au numéro de segment 07C0h + 288. Le programme d'amorçage est chargé au début du numéro de segment 07C0h. La taille d'un chargeur de démarrage est de 512 octets et chaque segment de 16 octets. Cela signifie que les segments de pile commencent 4096 octets après la fin du chargeur de démarrage.

mov sp, 4096 

Ceci définit le pointeur de pile à 4096. Cela signifie que le sommet de la pile est maintenant 4096 octets au-delà du début du segment de la pile. Effectivement, cela a alloué 4096 octets pour la pile.

mov ax, 07C0h 
mov ds, ax 

Cela définit le segment de données sur 07C0h (le segment où démarre votre programme d'amorçage). Lorsque vous faites référence aux étiquettes de données plus tard dans le chargeur de démarrage, ils utiliseront le segment de données. Votre chargeur de démarrage doit donc être au début du segment de données pour pouvoir trouver le bon emplacement en mémoire.

+0

J'ai trouvé ce document utile: http://duartes.org/gustavo/blog/post/how-computers-boot-up/ – Zack

3
mov ax, 07C0h // copy the address 07C0h into the register ax 
add ax, 288  // add the number 288 to the address in ax 
mov ss, ax  // copy the result to the stack segment register (07C0h + 288) 
mov sp, 4096 // set the stack pointer to 4096 

mov ax, 07C0h // copy the address 07C0h to ax again 
mov ds, ax  // copy the address 07c0h from ax into ds 

.. c'est tout ce que vous avez donné.

+0

ok, merci beaucoup. – user1571682

Questions connexes