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

如果有任何区别,我正在运行库存的戴尔 Inspiron 15 BIOS。


显然,对我来说正确的值是 0x80。

BIOS 加载硬盘驱动器并根据此答案从 0x80 开始标记它们。

出于某种原因,我的特定 BIOS 决定首先加载 USB 驱动器,这样我就可以从那里启动。

4

1 回答 1

2

简单的答案是正确的值dl是 in dl

令人高兴的答案是 GET DRIVE PARAMETERS 的dlint 13h, ah=8返回要使用的几何图形,并允许 FAT12 软盘映像代码从任何可以从 USB 闪存驱动器启动的 BIOS/版本运行。

在这里查看我的帖子:USB 启动秘密

于 2011-08-20T14:55:39.520 回答