【发布时间】:2015-02-06 23:32:52
【问题描述】:
我正在尝试制作一个可以从 USB 运行的简单引导加载程序。在几个问题之后,我尝试使用以下 asm 代码块(我从MikeOS 获得):
BITS 16
start:
mov ax, 07C0h ; Set up 4K stack space after this bootloader
add ax, 288 ; (4096 + 512) / 16 bytes per paragraph
mov ss, ax
mov sp, 4096
mov ax, 07C0h ; Set data segment to where we're loaded
mov ds, ax
mov si, msg
call move
jmp $
msg db 'Whatever!', 0
move:
mov ah, 0Eh
.print:
lodsb
cmp al,0
je .Done
int 10h
jmp .print
.Done:
ret
times 510-($-$$) db 0
dw 0xAA55
当我尝试从 USB 启动 L 时,这导致 L 被打印无数次 :( 谁能告诉我我做错了什么。
我正在使用 dd 将其复制到扇区 0。
编辑:不知何故,这在我的 PC 上不起作用,但在我姐妹的笔记本电脑上起作用。 有人知道为什么吗?
【问题讨论】:
-
你的代码对我有用:cl.ly/image/2H0E0Z3I0S3y
-
每当我尝试从 QEmu 或 Virtual Box 运行它时它都能正常工作,但是当我重新启动 PC 并直接从 USB 启动它时就会出现问题
标签: assembly usb bootloader