DISPLAY:
MOV AH,02H
MOV DH,10H
MOV BH,00H
INT 10H
MOV AL,[SI]
CMP AL,00H
JE readMBS
MOV AH,09H
MOV CX,01H
MOV BH,00H
MOV BL,70H
INT 10H
INC DL
INC SI
JMP DISPLAY
readMBS:
MOVAX,0201h
MOVCX,0001h
MOVDX,0080h
MOVBX,1000h
INT13h ;将主引导区(即本SYSGUIDE.DAT)读出到0000:1000H处
MOV ax,0201h
MOV cx,0006h ;读0 0 6扇,(即原来的MBS)
MOV dx,0080h
MOV bX,07C00h
int 013h
readkey:
MOV AH,00H
INT 16H
CMP AL,'1' ;是1么?
JE number1
CMP AL,'2'
JE number2
CMP AL,'3'
JE number3
CMP AL,'4'
JE number4
jmp readkey
number1:
db 0a0h,0c2h,11h ;相当于mov al,[011c2h],因为用mov al,[011c2h]不能编译
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,080h
db 88h,26h,0beh,11h ;相当于mov [011beh],ah
mov ah,00h
db 88h,26h,0ceh,11h ;mov [11ceh],ah
db 88h,26h,0deh,11h ;mov [11deh],ah
db 88h,26h,0eeh,11h ;mov [11eeh],ah
jmp ok
number2:
db 0a0h,0d2h,11h ;mov al,[11d2h]
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,80h
db 88h,26h,0ceh,11h ;mov [11ceh],ah
mov ah,00h
db 88h,26h,0beh,11h ;mov [11beh],ah
db 88h,26h,0deh,11h ;mov [11deh],ah
db 88h,26h,0eeh,11h ;mov [11eeh],ah
jmp ok
error1:
jmp readkey
number3:
db 0a0h,0e2h,11h ;mov al,[11e2h]
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,80h
db 88h,26h,0deh,11h ;mov [11deh],ah
mov ah,00h
db 88h,26h,0beh,11h ;mov [11beh],ah
db 88h,26h,0ceh,11h ;mov [11ceh],ah
db 88h,26h,0eeh,11h ;mov [11eeh],ah
jmp ok
number4:
db 0a0h,0f2h,11h ;mov al,[11f2h]
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,80h
db 88h,26h,0eeh,11h ;mov [11eeh],ah
mov ah,00h
db 88h,26h,0ceh,11h ;mov [11ceh],ah
db 88h,26h,0deh,11h ;mov [11deh],ah
db 88h,26h,0beh,11h ;mov [11beh],ah
jmp ok
ok:
mov ax,0301h
mov cx,0001h
mov dx,0080h
mov bx,1000h
int 13h ; 将改变了引导标示的分区表,写回0 0 1扇
MOVCX,040h
MOVDI,7dbeh
MOVSI,11beh
REPNZ MOVSW
MOV ax,0301h
MOV cx,0006h ;将改变了引导标示的分区表,写回0 0 6扇
MOV dx,0080h
MOV bX,07C00h
int 013h
MOV bx,7c00h ;交执行权给0000:7C00处
JMP bx ;长跳转至原MBR代码处执行 CODE ENDS
END START
代码到此就讲完了,程序本身不复杂,只要你了解了实现原理,在实现时才会得心应手,好了,赶快把我们的源代码编译链接一下,把模块二得到的程序取名为SYSGUIDE.EXE,从模块一所得的程序中提取出我们要的程序取名叫SYSGUIDE.DAT,提取方法如下:
1、在DOS方式下,输入“DEBUG GUIDE.EXE”,其中GUIDE.EXE是我们用模块一得到的程序文件(在此强烈警告千万不要运行这个GUIDE.EXE程序),
2、在DEBUG提示符下输入:R CX(回车) 1BD(回车) N(回车) SYSGUIDE.DAT(回车) W(回车)Q(回车)。这样你就会发现在你当前的目录中就有了一个名为SYSGUIDE.DAT的文件,着就是我们将用来写入硬盘第一扇区的扇区程序文件了,赶快把它和SYSGUIDE.EXE文件拷贝到一个文件夹下吧。
好了,我们要的程序已经得到了,就让我们来用用看,在我们最后安装的WIN98中执行吧,当看到以下提示时,键入数字键“1”。
'Please choose the number (1)Install the SYSGUIDE
(2) Delete the SYSGUIDE
然后重新启动,怎么样,是不是看到了引导选择提示?不过界面是不太好看了^_^,但是没什么,毕竟这是我们自己写的多引导程序哦!好了,我们选择“1”试试,是不是进了我们先前安装的WINXP?然后重新启动,再选择“2”试试,是不是进了我们后来安装的WIN98了!
对了我们好象还有一个BOOTMAGIC的功能没有实现哦,就是程序自动识别操作系统的功能,我想这个功能就留到我们读者自己去扩充吧!我在这大致的说明一下原理,又回到我们的表3,看到其中偏移04的那个字节么?其实BOOTMAGIC就是利用了这个原理来实现智能化的识别操作系统的,那具体要怎么做呢?我不说,自己去想^_^。
到了说886的时候了,再写下去编辑可不会用了哦!就这样吧,有兴趣来讨论,联系方法到我的源程序中找。程序可以到http://lsky.net/download/soft.asp?id=35下载。
该文在<<黑客X档案>>增刊上发表,如有转载请注明WWW.LSKY.NET(天龙在线),作者
0
顶一下0
踩一下