用汇编自制mbr引导程序的有关问题
用汇编自制mbr引导程序的问题
以下是网上十分流行的mbr代码:
org 7c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; es:bp = 串地址
mov cx, 16 ; cx = 串长度
mov ax, 01301h ; ah = 13, al = 01h
mov bx, 000Ch ; 页号为0(bh = 0) 黑底红字 (bl = 0Ch,高亮)
mov dl, 0
int 10h ; 10h号中断
ret
BootMessage: db "Hello,OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志
我用nasm编译成bin,再用UltraISO制成iso文件,最后用vm引导,发现显示不了字符串,
后来发现问题出在org 7c00h这里 把这句去掉即可显示正常,那么问题来了,软件是否会自动修正引用,导致引用异常?
------解决思路----------------------
光盘的引导扇区好像是 2KB 大小吧,可以用 512B 的吗。
照你这么说,光驱的引导扇区加载偏址是 0000?没看过光驱的引导,看来什么时候找个来看看。
MBR,说的是硬盘的主引导扇区吧,写入到硬盘的上面试试了,当然了,也是在 vm 里。
以下是网上十分流行的mbr代码:
org 7c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; es:bp = 串地址
mov cx, 16 ; cx = 串长度
mov ax, 01301h ; ah = 13, al = 01h
mov bx, 000Ch ; 页号为0(bh = 0) 黑底红字 (bl = 0Ch,高亮)
mov dl, 0
int 10h ; 10h号中断
ret
BootMessage: db "Hello,OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志
我用nasm编译成bin,再用UltraISO制成iso文件,最后用vm引导,发现显示不了字符串,
后来发现问题出在org 7c00h这里 把这句去掉即可显示正常,那么问题来了,软件是否会自动修正引用,导致引用异常?
------解决思路----------------------
光盘的引导扇区好像是 2KB 大小吧,可以用 512B 的吗。
照你这么说,光驱的引导扇区加载偏址是 0000?没看过光驱的引导,看来什么时候找个来看看。
MBR,说的是硬盘的主引导扇区吧,写入到硬盘的上面试试了,当然了,也是在 vm 里。