05H分区结束磁头号 06H其高2位为分区结束柱面号的高位,底6位为分区结束扇区号 07H分区结束柱面号的低位 08H~0BH在线性寻址方式下的分区的扇区地址。 0CH~0FH以扇区为单位的该分区大小(总扇区数) 逆风者 我们来看看BootMagic之类的软件是如何实现多系统引导的了,在表3中我们看到在偏移00H处的一个字节当其值为80H时代表该分区是一个引导区,当其值为00H时代表该分区不是引导区,其实多引导的实现原理就是通过改变该处的值来选择用来引导的分区。 假设你已经了解了以上原理,我们就完全可以做出自己的多重引导程序来了,我在此写出一个完整的实现程序,我将为大家分析这个程序应该怎么来写。假设你有一块硬盘,你在上面安装了一个windowsXP,可你现在想装个windows98,于是你用PartitionMagic将你的第一个扩展分区也就是你的D区设置为主分区,然后激活,重启动并用windows98安装光盘引导系统,并安装好windows98。就到这,你先不要急于安装BootMagic,让我们来试试动手做个自己的BootMagic怎么样。 很显然,要实现此功能,最少需要两个模块,模块一:被写入主引导扇区中,用来取代原MBR区,它必须能够在系统引导前获取执行权,实现主分区的引导选择后,将执行权交给被选择的操作系统,从而实现多系统引导;模块二:实现三个功能,首先将原主引导扇区备份一个到其他扇区(在我的例子中把它备份到0头0道 6扇),然后将模块一写入主引导扇区。另外模块二还实现多引导程序的卸载 模块二功能相对简单,其源程序如下: ;硬盘多引导安装程序(SYSGUIDE.EXE)模块二 DATA SEGMENT D1 DB 'choose' D2 DB 'Please choose the number (1)Install the SYSGUIDE',0dh,0ah,' DB ‘ (2) Delete the SYSGUIDE',0dh,'$' D3 DB 'SYSGUIDE.DAT',00H D4 DB 'Can not find file (SYSGUIDE.DAT)',0dh,0ah,'$'
D5 DB 0dh,0ah DB 0dh,0ah DB 0dh,0ah DB ' ----------# MUCH SYSTEM GUIDE #------------',0dh,0ah DB ' E-mail:tyhhyf@hotmail.com',0dh,0ah DB ' OICQ:86633320',0dh,0ah,'$' DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV DX,OFFSET D5 MOV AH,09H INT 21H MOV AH,00H INT 16H MOV DX,OFFSET D2 MOV AH,09H INT 21H readkey: MOV AH,00H INT 16H cmp al,'1' je key1 cmp al,'2' je key2 jmp readkey key1: MOV AX,0201H ;读0 0 1扇区 MOV CX,0001H MOV DX,0080H MOV BX,0F000H INT 13H MOVSI,offset D1 MOVDI,0F020H MOVCX,0003H REPZ CMPSW JZEXIT ;字符串相同则跳转 mov ax,0301h ;将原MBS区备份一个到0 0 6 扇 mov cx,0006h mov dx,0080h int 13h MOV AH,3DH MOV DX,OFFSET D3 MOV AL,00H INT 21H ;打开文件SYSGUIDE.DAT JB OPERERROR PUSH AX MOV AH,3FH MOV DX,0F000H MOV CX,018DH POP BX INT 21H MOV AX,0301H ;将SYSGUIDE.DAT写到0 0 1扇,替代原来的MBR MOV CX,0001H MOV DX,0080H MOV BX,0F000H INT 13H JMP EXIT key2: MOV AX,0201H;读0 0 1扇区 MOV CX,0001H MOV DX,0080H MOV BX,0F000H INT 13H MOVSI,offset D1 MOVDI,0F020H MOVCX,0003H REPZ CMPSW JNZEXIT ;字符串相同则跳转 MOV AX,0201H ;读0 0 6扇区 MOV CX,0006H MOV DX,0080H MOV BX,0F000H INT 13H MOV AX,0301H ;写0 0 1扇区 MOV CX,0001H MOV DX,0080H MOV BX,0F000H INT 13H JMP EXIT OPERERROR: MOV AH,09H MOV DX,OFFSET D4 INT 21H EXIT: MOV AH,4Ch INT 21h CODE ENDS END START 模块一被写入到硬盘的第一个扇区中,在系统引导之前获得执行权,从而实现多引导。因为这是个扇区程序,有别于一般的程序文件,其格式类似于COM文件,在此我是采用DEBUG程序,从EXE文件中提取的方法来实现的,源程序如下: ;多引导程序(SYSGUIDE.DAT),需要从以下源程序(模块一)产生的程序文件中提取
本文章更多内容:<<上一页 - 1 - 2 - 3 - 4 - 下一页>> |