最初のUSBドライブを意味する引数(レジスタdl)を知っていますか?USBドライブからのロードコード
私はNASMのチュートリアルをいくつか試していますが、物理的なブートをしたいと思います(私はqemuでクリーンなものを手に入れることができます)。
これは、ディスクからの「カーネル」のデータをロードするコードのセクションです:
loadkernel:
mov si, LMSG ;; 'Loading kernel',13,10,0
call prints ;; ex puts()
mov dl, 0x00 ;; The disk to load from
mov ah, 0x02 ;; Read operation
mov al, 0x01 ;; Sectors to read
mov ch, 0x00 ;; Track
mov cl, 0x02 ;; Sector
mov dh, 0x00 ;; Head
mov bx, 0x2000 ;; Buffer end
mov es, bx
mov bx, 0x0000 ;; Buffer start
int 0x13
jc loadkernel
mov ax, 0x2000
mov ds, ax
jmp 0x2000:0x00
それはどんな違いをした場合、私は株式DellのInspiron 15 BIOSを実行していますよ。
明らかに、私の正しい値は0x80です。
BIOSはハードドライブをロードし、0x80 according to this answerで始まるラベルを付けます。
私の特定のBIOSは、何らかの理由でUSBドライブを最初にロードすることを決めているので、そこからブートできます。