Пишу простейший загрузчик. Хочу, чтобы при вводе команды он переключался на загрузку другой операциооной системы, например винды.Для этого копирую код в какую-нить область памяти следующей процедурой: NASM: Код (Text): Copy: push 0x07c0 ;нынешний сегмент pop ds push 0x9000 ;будущий сегмент pop es xor si, si xor di, di mov cx, 128 ;копирнуть 512 байт rep movsd jmp 0x9000:loadwin ;прыгнуть на нужную метку в коде ret Затем считываю информацию с первого сектора диска с помощью портов в сегмент 0x07c0 NASM: Код (Text): loadwin: mov dx,1f6h mov al,0a0h ;нужный диск out dx,al mov dx,1f2h mov al,1 ;считать один сектор out dx,al mov dx,1f3h mov al,1 ;Считать первый сектор out dx,al mov dx,1f4h mov al,0 ;Цилиндр 0 out dx,al mov dx,1f5h mov al,0 ;Тоже 0 out dx,al mov dx,1f7h mov al,20h ;Чтение. out dx,al still_going: in al,dx test al,8 jz still_going ;Продолжать пока диск не освободится mov cx,512 push 0x7c00 pop es ;считываем в нужный сегмент mov di,0 mov dx,1f0h rep insw jmp 0x7C00:0 ;Ну и прыгаем на загруженный код В итоге ничего не происходит и виртуальная машина нагружает винт.
Проще через прерывания биоса. Код (Text): mov dx,1f6h mov al,0a0h ;нужный диск out dx,al Эти два бита необязательны. А так ошибок не вижу. Через отладчик прогани.
Я как-то паршиво умею пользоваться отладчиком.... Я пробовал в Олли ДБГ пихать. Оно бинарные файлы не шарит, а ехе файлы открываются через виндовс очень плохо(через вызов консоли).. и найти среди хлама свои строки мне не под силу.