В последней версии Ubuntu, x64.
Мне очень интересно, как операционные системы могут устанавливать себя на компьютеры при загрузке с флеш-накопителей, но я хотел бы сделать это в реальном режиме, а не в защищенном или длинном режиме. Конечно, старые операционные системы, такие как MS-DOS, использовали для этого.
Для реального режима, есть ли прерывание для этого? Или мне нужно сначала перейти в защищенный или длинный режим, прежде чем я смогу записывать данные прямо на жесткий диск и / или читать из этой же области?
Это делается для небольшой ОС реального режима с двухэтапным загрузчиком:
org 0x7C00
mov ah, 0
int 13h
mov dx, 0
mov ah, 2
mov al, 10h
mov dl, 0x80
mov ch, 0
mov dh, 0
mov cl, 2
mov bx, stage2
int 0x13
jmp stage2
times 510-($-$$) db 0
dw 0xAA55
msg db "!!"
%include "read.s" ;read.s does not exist yet, as I do not know how to read from an address on the hard disk
%include "write.s" ;write.s does not exist yet, as I do not know how to write to an address on the hard disk
stage2:
call ReadStr ;always reads from the same address, if the message is there, sets bl to 0x01. Otherwise, sets bl to 0x00.
cmp bl, 0x00
je load
mov ah, 0eh
mov al, "#" ;tiny message to tell me that the string is already at the address
mov bx, 0
int 10h
jmp $
load:
mov ax, [msg]
call LoadStr ;loads the message to the same address that ReadStr reads from
mov ah, 0eh
mov al, "$" ;tiny message to tell me that the string does not already exist at the address
mov bx, 0
int 10h
jmp $
Идея заключается в том, что при первой загрузке загрузчика он должен вывести «$», но при второй загрузке он должен вывести «#», поскольку данные уже существуют на жестком диске по указанному адресу. , Но я не знаю, как реализовать read.s и write.s. В идеале (основная цель этого) ОС будет установлена на компьютер при первой загрузке загрузчика с флэш-накопителя. Нужно ли для этого сначала устанавливать Long Mode или это возможно в BIOS?