专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 汇编语言

小弟我在dos下将MBR读到7c00处,怎么才能让他再自己启动起来

发布时间:2010-06-14 15:33:38 文章来源:www.iduyao.cn 采编人员:星星草
我在dos下将MBR读到7c00处,如何才能让他再自己启动起来?
我的机器启动到dos之后,我再把MBR读到0000:7c00处。
我想让机器回到刚启动的步骤,该怎么操作呢?

我试过了读过去之后,再jmp   0000:7c00也是不行的。

我估计也没这么简单,但是需要高手来指点一下呀。

------解决方案--------------------
JMP 0FFFFH:0 重启机器
------解决方案--------------------
记得bios int 19h去执行 0000:7c00的loader代码的
------解决方案--------------------
jmp 0000:7c00
是可以的。我写操作系统的时候都是这样做的。不过如果已经运行了DOS再这样做的话就不好使了。因为在dos启动的时候可能会修改BIOS里面的某些参数,比如可用内存的数量。这样就会在你模拟启动的时候出现问题,因为你的模拟启动没有进行硬件检测。还有就是DOS的问题了,鬼知道它在启动的时候都是干了些什么。你可以使用Bochs调试一下,看看到底运行到那一步出现的问题。
我以前就是这样做的,最后才找到问题的所在。
------解决方案--------------------
天哪你通过这种方法调试也太慢了。建议你使用Bochs,绝对好用
------解决方案--------------------
你要这样恢复:
1. 数据读入到一个空闲的内存区域;
2. cli
3. rep movsb从buffer到[0:0]的复制;
4. sti
5. ds=es=ss=0,jmp 0000:7c00

------解决方案--------------------
jmp 0000:7c00是可以的!!!
------解决方案--------------------
Jmp不行好像还可以:

push 7c00
push 0
ret

吧。
------解决方案--------------------
jmp和retf都可以,关键是要先恢复引导时的状态。

------解决方案--------------------
你这样已经加载了OS了,OS对低位内存都是有只读保护的…… 建议用个虚拟机 VMware Workstation
------解决方案--------------------

jmp指令用机器码直接写。
.... 复制mbr到000:7c00
dw 0eah
dw 0000,7c00h
------解决方案--------------------
还是建议楼主使用bochs跟踪单步调试,看看到底是什么原因。仅靠猜测是很难找到原因的。而且也很难找到真正的问题所在,就像买彩票一样难以成功。
------解决方案--------------------
建议楼主把MBR读到其它内存位置,然后jmp过去,试试结果会怎样。
------解决方案--------------------
int 13好像没有改吧,而且引导扇区的内容似乎也没变。bochs这个东东是个洋玩音儿,我也不会用。^_^
------解决方案--------------------
在debug下面用jmp 0000:7c00好像跳转不了,在cmd-> debug下面可以

jmp指令用机器码直接写。
.... 复制mbr到000:7c00
dw 0eah
dw 0000,7c00h
在debug下面是不行的,死机,如果把上面的代码弄到自己的程序中应该可以吧!

dos启动后用debug 的 d 7c00 7c10查看7c00处的代码是否还是引导记录中的内容。如果不是,就只有自己读主引导记录了。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: