这下可以方便的启动LINUX了,而不用通过GRUB转来转去了。
作者:fanfanfan
1.默认启动已经设置为活动分区的主分区。
2.在电脑启动时,按右shift键启动第一主分区(hd0,0)。
3.在电脑启动时,按左shift键启动第二主分区(hd0,1)。
4.在电脑启动时,按ctrl键启动第三主分区(hd0,2)。
5.在电脑启动时,按alt键启动第四主分区(hd0,3)。
没有改动硬盘启动部分代码,只是改了开头的一个跳转代码到我所加的代码处执行。所加代码所占用的空间为原始MBR出错信息所在的空间。我把出错信息作了减缩,所以,出错的话,还是会有提示的。
实现过程:
1.进入纯DOS状态,运行hiddpt.exe(我以前做的一个程序),将MBR保存为文件MBR.DAT。
2.在XP DOS命令行下运行DEBUG,按照设想的功能进行汇编,再反汇编,得到机器码;
3.用UltraEdit打开MBR.dat文件,将机器码逐个敲入相应地址中。将偏移地址25,26处的值从"1C","06"改为"62","07"(跳转到附加的代码处执行)。
4.进入纯DOS下,用hiddpt.exe将修改后的MBR.dat文件写回到硬盘的第一扇区。
(hiddpt.exe不修改硬盘分区表,会将读出的原硬盘分配表重写回去。并将原来和改写过的MBR分别保存成文件。)
所加的代码从MBR的第354字节处开始,具体代码如下:
0000:0762 B402 MOV AH,02
0000:0764 CD16 INT 16
0000:0766 240F AND AL,0F
0000:0768 3C00 CMP AL,00
0000:076A 7438 JZ 07A4
#是否右shift键按下
0000:076C A801 TEST AL,01
0000:076E 750C JNZ 077C
#是否左shift键按下
0000:0770 A802 TEST AL,02
0000:0772 750D JNZ 0781
#是否ctrl键按下
0000:0774 A804 TEST AL,04
0000:0776 750E JNZ 0786
#是否alt键按下
0000:0778 A808 TEST AL,08
0000:077A 750F JNZ 078B
#第一主分区激活字节地址
0000:077C BBBE07 MOV BX,07BE
0000:077F EB0D JMP 078E
#第二主分区激活字节地址
0000:0781 BBCE07 MOV BX,07CE
0000:0784 EB08 JMP 078E
#第三主分区激活字节地址
0000:0786 BBDE07 MOV BX,07DE
0000:0789 EB03 JMP 078E
#第四主分区激活字节地址
0000:078B BBEE07 MOV BX,07EE
#先将各活动标志清零
0000:078E B400 MOV AH,00
0000:0790 8826BE07 MOV [07BE],AH
0000:0794 8826CE07 MOV [07CE],AH
0000:0798 8826DE07 MOV [07DE],AH
0000:079C 8826EE07 MOV [07EE],AH
#设置相应的分区为活动分区
0000:07A0 B480 MOV AH,80
0000:07A2 8827 MOV [BX],AH
#跳到正常的MBR执行
0000:07A4 E975FE JMP 061C


gxf 于 2007-10-07 22:41:32发表:
我得汇编没怎么学好,是该好好复习一下了
deepwhite 于 2007-10-07 22:28:34发表:
牛人!
coolskyboy 于 2007-10-07 21:33:41发表:
这个还不弄。。想想也没什么必要对我来说。
奶茶dsk 于 2007-10-07 21:16:26发表:
晕,果然是超级硬盘MBR,支持下。。:0L :0L