NASM - 从USB驱动器加载代码

时间:2011-01-16 03:13:45

标签: nasm bootloader usb-drive qemu

任何装配大师是否都知道第一个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 according to this answer开始标记它们。

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

1 个答案:

答案 0 :(得分:2)

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

  

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

在此处查看我的帖子:USB Booting Secrets