Chinaunix首页 | 论坛 | 博客
  • 博客访问: 136496
  • 博文数量: 12
  • 博客积分: 2502
  • 博客等级: 少校
  • 技术积分: 163
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-20 23:32
文章分类

全部博文(12)

文章存档

2011年(1)

2009年(11)

我的朋友

分类:

2009-09-26 16:31:23

最近在研究《自己动手写操作系统》这本书,很不错的一本书。不过在研究的过程中我发现当Virtual PC 2007从软盘启动的时候,竟然不去检测引导区标志55AA而直接将引导代码装入内存去执行。是不是Virtual PC 2007里可以设置成去检测或不去检测引导区标志呢?如果有哪位仁兄能告诉我,感激不禁。

具体是这样的,在书开头有这么个代码

    org    07c00h            ; 告诉编译器程序加载到7c00处
    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                ; 结束标志

我将最后两行代码改成

times 512-($-$$) db 0

结果也能正常加载如下图

附记(10月8日)

都公示了这么多天,没人响应,算了,我宣布如下:

当VirtualPC2007从软盘启动时,它的的确确不去检测软盘的0磁道0柱面1扇区的引导区标志。另一个强大的调试工具Bochs则没有这种bug(这个问题应该算bug吧),因为Bochs就是为调试而生的,虽然在运行大型操作系统时相当的慢,这也不能怪它,谁叫它用软件全面的模拟了x86系统呢。

另(10.15)

在Bochs的配置文件中可以设置成不检测该标志,具体说明如下:


# FLOPPY_BOOTSIG_CHECK: disabled=[0|1]
# Enables or disables the 0xaa55 signature check on boot floppies
# Defaults to disabled=0
# Examples:
#   floppy_bootsig_check: disabled=0
#   floppy_bootsig_check: disabled=1

以上

特此

(有啥问题请留言,或给我发邮件seapeek@gmail.com,呵呵,虽然我也是菜鸟)

阅读(2037) | 评论(2) | 转发(0) |
0

上一篇:没有了

下一篇:谈谈MASM与COM格式文件

给主人留下些什么吧!~~

chinaunix网友2009-10-31 00:22:33

恩,看了你的几篇文章,感觉你对问题的钻研的耐心,向你学习

chinaunix网友2009-10-05 15:46:04

只为顶贴、、、