2011-01-16 14 views
3

最初の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ドライブを最初にロードすることを決めているので、そこからブートできます。

答えて

2

簡単な答えは、dlの正しい値がdlであることです。

幸せな答えはint 13h, ah=8 GETのドライブパラメータを持つdl値は、使用するジオメトリを返し、起動できるBIOS /バージョンから実行するにはFAT12フロッピーディスクイメージコードを可能にするということですUSBフラッシュドライブ。

私の投稿を参照してください:USB Booting Secrets

関連する問題