在bois中的开启读取磁盘先后顺序 可以概述如下: 1.电源开启后,运行BIOS里的启动和自检
程序,出问题就滴嘟几声,或者在屏幕上提 示,出现这种情况你就惨了:(,赶快检查硬件吧。 2.如果万事OK,BIOS的启动程序按照CMOS的设置,依次检查各个可启动的存储设备, 找到第一个存在的此类设备,装入其第一个
扇区(512字节,也就是传说中的0扇区)到物 理地址为7C00H的地方,
然后跳转到0000H:7C00H继续执行。如果出现“Operating System not found”,说明你没有可启动的 *** 作系统,这应该是BIOS给出的信息,但是我尚未发现 BIOS凭什么给出这个信息的,大家可以讨论讨论。如果你用一张没有启动程序的兼容DOS 格式的软驱启动,则会提示“Non-System disk or disk error...”,这是兼容DOS格式软驱的0扇区里的程序提示的,如果看到0扇区里的程序, 就可以发现这段提示。 根据以上boot的步骤,只要把程序的二进制代码写入了0扇区就可以作为boot程序运行了 。但是boot程序还有许多要考虑的问题。首先boot程序不能编译成EXE格式并动态装入, 它所有的寻址都必须是链接前就确定的,也就是静态的。比如不能随便使用OFFSET或SEG 等伪指令,最好不要使用多个segment,除非你真的确定这些segment都装到哪去了。对于各 种跳转指令和CALL指令 ,如果不是相对寻址的,必须得考虑目标的真实地址,如CALL FAR PTR FUNC,这样的语 句就要小心,否则就不知道跳到哪去了,然后只有死机一条路:(。 怎样写boot程序呢,我有一个土办法,就是用DOS下的.COM可执行文件。该格式的文 件所包含的程序首先只有一个段,代码和数据市共用一个段的,所有代码和数据必须从段 的第100H字节开始写起,这可以用伪指令ORG 100H实现,程序所有的地址都是静态的,不用像.EXE文件一样需要动态定位。但是还有一 个问题就是编译器认为所有地址的数值都是相对于CS:0000H确定的,而BIOS装入我们的程 序时CS=0000H,程序的偏移在7C00H,如果我们自己对所有地址都手动定位那不是很惨:( ,所以我们做一个长跳转,跳到7B0H:IP-7C00H处,然后所有环境就和.COM文件的环境相同 了。 现在就介绍我写的一个简易的boot程序,运行以后是一个简单的console程序,调用 BIOS的功能接受用户输入,然后把输入回显出来,注意此时DOS没有装入,只能用BIOS的 系统调用,然后一直死循环下去了。在MASM6.11下编译这个程序命令为 ML /AT BOOT1.ASM TASM下编译命令为 TASM BOOT1.ASM TLINK /t BOOT1.ASM 然后用debug打开,即“debug BOOT1.COM”,输入“w 100 0 0 1”,把boot1.com二进制 代码写入A盘的0扇区(注意要用一张没用的软盘,因为覆盖0扇区后,DOS就打不开着张软 盘了),最后从该软盘启动,就可以进入这个简易的console了。 BOOT1.ASM源程序在后面发出来,欢迎大家讨论和修改,如果有什么更好编写boot程 序的方法,也可以提出来。谢谢大家赏脸看完这篇仓促的拙作:)Boot:是系统引导文件,装多系统或者重装系统的时候会用到它。
作用:系统启动的时候要先读取boot的相关信息,boot.ini是系统启动配置文件,boot.wim是系统启动库文件。
若要查看它,只要去掉其隐藏属性,即可用记事本打开它,也可以在“开始”中运行msconfig.exe,在d出的“系统配置实用程序”对话框中单击“BOOT.INI”选项卡就可窥见其庐山真面目。
评论列表(0条)