任何汇编专家都知道表示第一个 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 Inspiron 15 BIOS。
<小时/>显然,对我来说正确的值是 0x80。
BIOS 加载硬盘并从 0x80 according to this answer 开始标记它们。 .
出于某种原因,我的特定 BIOS 决定将 USB 驱动器作为第一个加载,这样我就可以从那里启动。
最佳答案
简单的答案是 dl
的正确值位于 dl
中。
令人高兴的答案是 dl
值与 int 13h, ah=8
GET DRIVE PARAMETERS 返回要使用的几何图形并允许 FAT12 软盘镜像代码运行从任何可以从 USB 闪存驱动器启动的 BIOS/版本。
在这里查看我的帖子:USB Booting Secrets
关于NASM - 从 USB 驱动器加载代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703595/