2012-11-07 2 views
0

Je fais des recherches sur les bootloaders. C'est-à-dire que j'essaye d'écrire un bootloader simple avec nasm qui fonctionnera en VB (disque vdi). Pour l'instant, j'ai mis en place un environnement de virtualbox à des fins de test et charge avec succès MBR qui réside sur l'adresse absolue (HXD hex edito) 0x2000. Mais maintenant, je veux sauter en dehors de MBR (0x2200 big endian) et exécuter du code qui y réside (Bellow snippet ne fait pas le travail). J'utilise la directive NASM [org 0x7C00], dois-je utiliser ce décalage lors de la réalisation de sauts?Boîte virtuelle vdi nasm jump

[BITS 16] 
[org 0x7C00] 

%define location 0x0022 

start: 

    mov al, 0x12 
    mov ah, 0 
    int 0x10 

    jmp location:0000 

TIMES 510 - ($ - $$) db 0 
DW 0xAA55 

Ceci est vue hex de vdi (2000h est où MBR commence, 2200H est là où je veux sauter):

Hex view

Répondre

1

Le secteur de démarrage sera chargée à l'adresse 0x7c00 (qui, en raison des particularités des segments en mode réel, peut être adressée de plusieurs façons.Les deux communes étant 0: 0x7c00 et 0x7c0: 0 - vous ne devriez pas compter sur un particulier). Le fait qu'il soit au décalage 0x2000 dans votre image disque est probablement dû au format de cette image, il n'a aucun rapport avec l'adresse mémoire. De plus, le processus de démarrage ne charge qu'un seul secteur de 512 octets, si vous en avez besoin, vous devez le charger vous-même. Ensuite, vous pouvez y accéder en utilisant l'adresse à laquelle vous l'avez chargé.