起動ファイルの配置が機能しない

起動ファイルの配置が機能しない

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")で設定できます。

おすすめ記事