[英]Simple USB Bootloader
我正在尝试制作一个可以从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被无限次打印:(谁能让我知道我在做什么错。
我正在使用dd将其复制到扇区0中。
编辑:这在我的PC上不起作用,但在我的姐妹笔记本电脑上起作用。 有人知道为什么吗?
您发布的代码中没有错误可以解释这些症状。
注意:有2个错误。 它假定方向标志是明确的,没有做一个cld
的前lodsb
,但可能会导致它来显示“W”,然后奇怪的字符(而不是一个“L”重复)。 它还没有为“ int 0x10,ah = 0x0E”使用的页号设置bh
中的值,但这可能不会显示任何内容(并且不会重复显示“ L”)。
鉴于代码本身没有原因; 最可能的问题是(如何)将生成的二进制文件复制到USB闪存的问题(可能性更高),或者是如何汇编代码的问题(可能性较小)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.