2010-01-01 20 views
2

Je dois pouvoir écrire un programme en assembleur pour lire le premier secteur d'un disque (le MBR) et l'écrire sur une disquette ou au moins afficher les données. Je comprends que INT 13h et 25h ne fonctionnent pas en mode protégé Windows et j'ai même essayé mon code dans Dos mais le système DOS se bloque lorsque j'exécute le programme. C'est le code:Assembly INT 13h - problème de lecture du disque

MOV byte ptr es:[bx], offset result 
    MOV  AL,1 ;number ofsectors to read 
    MOV  Cl,1 
    MOV  ch,0 
    mov  dl,80h ;the HDD 
    mov  dh,1 
    mov ah,02h 
    INT  13h 

résultat est la variable du tampon.

Merci d'avance.

+0

S'il vous plaît utiliser le « code » au code de balisage à des fins de présentation. –

Répondre

1

Yeb. ça a finalement marché. Voici le code (ne fonctionne que sous DOS parce que l'INT 13h fonction ne peut pas fonctionner dans les systèmes d'exploitation Windows.

  mov dx,80h 
     mov cx,1 
     mov bx,ds 
     mov es,bx 
     mov bx,offset result 
     mov ax,0201h 
     int 13h  
1

Je pense que cette ligne est mal

MOV byte ptr es:[bx], offset result ' attempts to write memory [bx] 

Il devrait être

MOV es, segment_offset ' probably not needed 
MOV bx, buffer_offset 
... 

Et peut-être vous aussi de restaurer l'ES, par exemple

push es 
mov es, ... 
... 
pop es 
' done 
+0

Merci Nick D j'ai changé mon code à ceci: mov dx, 80h, premier disque physique mov cx, 1, la tête 1, secteur 0 mov bx, ds; mov es, bx et point de démarrer tampon d'enregistrement mov bx, le résultat de décalage; lu en enregistrement de démarrage mov ax, 0201h; lire un secteur int 13h I Cela semble fonctionner. Il me donne beaucoup de rebut quand je l'imprime, mais comment puis-je m'assurer que c'est le vrai MBR? Merci à tous pour votre patience à lire mes questions. – Auxiliary

+0

@Auxiliary, consultez http://mirror.href.com/thestarman/asm/mbr/STDMBR.htm qui fournit beaucoup d'informations sur MBR. –