Mon système d'exploitation est maintenant en mode protégé, donc je ne peux pas accéder au disque en utilisant des interruptions maintenant. Et je ne sais pas comment passer en mode v86. accès au disque.Erreur de lecture/écriture du disque à l'aide de ports dans l'assemblage
J'ai décidé d'essayer le code que j'ai trouvé sur le forum.osdev.org.Dans l'émulateur, il montre disque lire ou écrire avec succès.Mais quand je vérifie le disque dur, il est vide ou quand je teste la lecture, Buffer est tout vide.
Quel est le problème avec ce code ou mon O/S? (Peut-être Stack problème causes?) CODE:
set_up_buffer:
xor ax,ax
mov es,ax
mov di,[buffer]
mov al,0xCD
stosb
mov al,0x19
stosb
WriteToMbr:
mov dx,1f6h ;Drive and head port
mov al,0a0h ;Drive 0, head 0
out dx,al
mov dx,1f2h ;Sector count port
mov al,1 ;Write one sector
out dx,al
mov dx,1f3h ;Sector number port
mov al,1 ;Wrote to sector one
out dx,al
mov dx,1f4h ;Cylinder low port
mov al,0 ;Cylinder 0
out dx,al
mov dx,1f5h ;Cylinder high port
mov al,0 ;The rest of the cylinder 0
out dx,al
mov dx,1f7h ;Command port
mov al,30h ;Write with retry.
out dx,al
oogle:
in al,dx
test al,8 ;Wait for sector buffer ready.
jz oogle
mov cx,512/2 ;One sector /2
mov si,[buffer]
mov dx,1f0h ;Data port - data comes in and out of here.
rep outsw ;Send it.
leave
ret
buffer:
times 512 db 0
Ne liez pas votre code, afficher en ligne, alors les gens peuvent aider. –
Comment quelqu'un pourrait vous dire ce qui ne va pas avec votre système d'exploitation. Vous ne nous avez rien montré à ce sujet. –
@SepRoland Expérimenté O/S développeur peut deviner quelque chose à ce sujet – user2590769