Передача управления другому загрузчику

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Vaper
Сообщения: 3
Зарегистрирован: 06 май 2009, 19:45

Мне нужно Ваше напутствие!
Пишу простейший загрузчик. Хочу, чтобы при вводе команды он переключался на загрузку другой операциооной системы, например винды.Для этого копирую код в какую-нить область памяти следующей процедурой:
NASM:
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:
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 ;Ну и прыгаем на загруженный код
В итоге ничего не происходит и виртуальная машина нагружает винт.
Ответить