2011-10-16 1 views
4

Je suis en train d'écrire un chargeur de démarrage, mais aucun de mes expériences ne pas fonctionné jusqu'à ce que je trouve cette question: Why doesn't this boot loader code work?MSNA Boot Loader comportement étrange

J'avais simplifié ce programme seulement écrire un char écran.

[ORG 0x7C00] 
[BITS 16] 

realstart: 
    jmp start 
    nop 


start: 
    xor ax,ax 
    mov ds,ax 
    mov es,ax 
    xor bx,bx 
    mov ah, 0x0e 
print: 
    mov al, "A" 
    int 0x10 
end:  
    cli 
    hlt 

    times 510 - ($-$$) db 0 
    dw 0xAA55 

Il compile très bien, mais dans le objdump il n'y a pas de commande int 0x10.

Si je laisse des chaînes (this file) tout fonctionne très bien.

Où est la prise?

(avec MSNA 2.08.02-1 Compiler sur Cygwin Win7 SP1)

+0

Je suis en train de compiler avec: nasm -O0 -f bin bootLoader.asm -o bootLoader.bin – banic

+0

Envoi d'un vidage. Compilé avec FASM et jeté avec ndisasm et l'int 10h est là. –

+0

J'ai téléchargé des captures d'écran: http://s2.photobucket.com/albums/y31/bannyy/NASM%20problem/ Im utilisant Win7 SP1, Cygwin, NASM. – banic

Répondre

0

Il semble y avoir rien de mal avec le code. Ce serait très étrange si le fait de désassembler le code avec ndisasm donne un résultat avec int 0x10 manquant. Donc je suppose que vous parlez de jeter le code dans l'exécution. Le secteur de démarrage contient normalement un enregistrement de démarrage juste après l'instruction de saut (qui indique au bootloader la taille du média et autres). Peut-être que le BIOS se mêle de ce qu'il pense être un enregistrement de démarrage pour une raison quelconque?

0
Bits 16 
org 0x7c00 
start: 
xor ax,ax 
mov ah,0x0E 
mov al,'A' 
int 10h 
mov al,10h 
int 16h 
int 19h 
hlt 
times 510-($-$$) db 0 
dw 0xAA55 

Essayez ce code.Si cela ne fonctionne pas, faites-moi savoir.