繁体   English   中英

简单的USB Bootloader

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM