My O/S теперь находится в защищенном режиме, поэтому я не могу получить доступ к диску с помощью прерываний. И я не знаю, как переключиться в режим v86. Мне нужно использовать порты для доступ к диску.Ошибка чтения/записи диска с использованием портов в сборке
Я решил попробовать код, который я нашел на forum.osdev.org. В эмуляторе он показывает, что чтение или запись диска успешно завершено. Но когда я проверяю жесткий диск, он пуст или когда я проверяю чтение, Buffer все пусто.
В чем проблема с этим кодом или моим O/S? (Может быть Stack Проблема Причины этого?) КОД:
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
Не ссылайтесь вам код, разместить его рядный, то люди могут помочь. –
Как кто-нибудь может сказать вам, что не так с вашей ОС. Вы ничего нам не показали. –
@SepRoland Опытный O/S Разработчик может что-то догадаться – user2590769