3

アセンブリの達人は、最初のUSBドライブを意味する引数(レジスタdl )を知っていますか?

私はいくつかの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 Inspiron15BIOSを実行しています。


どうやら、私にとって正しい値は0x80です。

BIOSはハードドライブをロードし、この回答に従って0x80からラベルを付けます。

私の特定のBIOSは、何らかの理由でUSBドライブを最初にロードすることを決定したので、そこから起動できます。

4

1 に答える 1

2

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

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

ここに私の投稿を参照してください:USBブートの秘密

于 2011-08-20T14:55:39.520 に答える