부팅 파일 배치가 작동하지 않습니다

부팅 파일 배치가 작동하지 않습니다

x86에서 다음 어셈블리 파일을 만들었습니다.

mov ah, 0x0e 
mov al, 'H'
int 0x10
mov al, 'e'
int 0x10
mov al, 'l'
int 0x10
int 0x10 ; 'l' is still on al, remember?
mov al, 'o'
int 0x10

jmp $ ; jump to current address = infinite loop

; padding and magic number
times 510 - ($-$$) db 0
dw 0xaa55

저는 nasm을 사용하여 다음을 컴파일합니다.

nasm -f bin boot_sect_simple.asm -o boot_sect_hello.bin

그리고 qemu를 사용하여 바이너리를 테스트했습니다.

qemu-system-x86_64 boot_sect_hello.bin

그런 다음 ddUSB 스틱의 부팅 섹션에 바이너리 파일을 썼습니다.

sudo dd if=/Users/niclas/assembly/OS/boot_sect_hello.bin of=/dev/disk2

그런 다음 정확성을 테스트한 후:

sudo dd if=/dev/disk2 of=/dev/stdout bs=512 count=1 | hexdump

0000000 b4 0e b0 48 cd 10 b0 65 cd 10 b0 6c cd 10 cd 10
0000010 b0 6f cd 10 eb fe 00 00 00 00 00 00 00 00 00 00
0000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
00001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
0000200

맞는 것 같다...

그러나 최신 시스템의 부팅 메뉴에서 루틴을 찾으려고 하면 작동하지 않는 것 같습니다... UEFI 스틱을 찾을 수 없습니다. 내가 뭘 잘못했나요?

면책 조항: Unix 및 Unixlike 시스템을 사용하여 부팅 가능하게 만들기 때문에 이것은 UNIX 질문입니다...

답변1

인터럽트 루틴을 사용하는 방법은 정확하지만 x86 모드에서만 가능합니다.

~에서위키피디아:

최신 x86 시스템에서는 BIOS 호출이 리얼 모드나 가상 8086 모드에서만 수행될 수 있습니다. v8086은 긴 모드의 옵션이 아닙니다.

나는 최신 시스템이 리얼 모드로 부팅되지 않는다고 생각하므로 int 10을 직접 사용할 수 없습니다. 또한, 전자주입시스템부트 섹터를 전혀 읽지 않습니다.. 이는 BIOS 설정 qv(-> "Legacy Boot")에서 설정할 수 있습니다.

관련 정보