第3章 认识保护模式 的代码修正

        关于《Orange's 一个操作系统的实现》第三章中认识保护模式部分的代码,自己在实现时,发现在运行时,虚拟机无法识别引导程序。经过判定,因为按照目前的程序,没有对引导扇区的511和512字节赋值为0x55aa。

        于是根据第一章代码的提示,尝试自己实现。

        1.直接使用第一章的赋值語句

結果失败。为什么?$代表当前行的运行地址,而$$代表了当前行所在节的起始地址。在第一个章的程序中,因为程序只有一个节,所以没有问题,但在3.1的代码中,有多个节,所以$$并不是代表代码起始处的地址。

    2.那直接使用起始地址吧,这是很自然的想法。代码如下

      times  510-($-0x7c00)

      dw 0xaa55

     更不幸,这次边编译都无法通过了。错误如下:

为什么会这样呢?明明是铁板钉钉的常量,却被认为是一个非常量呢,因为对nasm的語法并不熟悉,这部分的原因还需要再查找。

       3.杀手锏,问作者。于是很冒昧地给作者于渊兄发了邮件,这里得赞扬一下作者,当天上午就进行了回复。大意就是,参照第一章中的代码。又回到了第一种尝试的方案。不能放弃,终于邮件列表中有人给指了条小路,将目前代码中的节全部除去,也就是不再分节,这样就可以实现了。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值