怎样修改u盘分区主启动mbr (u盘分区做启动盘)

  这是写于2007年的日志,现发布出来,供有需要的参考。

  目的:通过修改MBR代码,实现在电脑开机的时候,选择不同硬盘分区上的操作系统。

  实现方法:需要一个安装程序,该安装程序实现提取硬盘分区信息,并将操作系统信息写入到启动代码里,然后将修改后的代码写入到硬盘的0磁头0磁道2到3扇区内。

  对MBR的修改(下面代码不包含对MBR的修改):探测到Ctrl或alt或shit按下时,将自定义选择与启动代码从0磁头0磁道2到3扇区里读出,加载到内存0000:7C00处执行。

  以下为自定义的启动代码(0磁头0磁道2到3扇区):加载之后,将自身从0000:7C00处搬到0000:0600处运行,根据选择的启动分区的参数,将启动分区的第一扇区读取到0000:7C00处,然后跳转到0000:7C00处启动相应的操作系统。

  如果是linux操作系统的话,需要将linux操作系统的启动管理器安装到某个分区上,而不能安装到MBR(该启动管理器安装后,会破坏原始的MBR,会导致linux启动不了)。

  [780]启动条数(1-N)(通过安装程序,将启动分区信息与提示信息写入到这里。)

  [781]当前显示行

  [782]当前所选择的行

电脑

  [783]字串显示颜色

  [900]欢迎信息起始地址

  [940]操作说明起始地址

  [990]读盘错误提示起始地址

  :7C00 FC CLD

  :7C01 BE007C MOV SI,7C00

  :7C04 BF0006 MOV DI,0600

  :7C07 B90004 MOV CX,0400

  :7C0A F3 REPZ

  :7C0B A4 MOVSB (搬动自身到0000:0600处)

  :7C0C E9008A JMP 060F(跳转到新地址运行)

  :060F B81200 MOV AX,0012

  :0612 CD10 INT 10(将显示更改到采色模式)

  :0614 BE0009 MOV SI,0900

  :0617 B002 MOV AL,02

  :0619 A28307 MOV [0783],AL

  :061C E8F700 CALL 0716

  :061F B001 MOV AL,01

  :0621 A28107 MOV [0781],AL

  :0624 A28207 MOV [0782],AL

  :0627 E8A600 CALL 06D0

  :062A BA0119 MOV DX,1901

  :062D B402 MOV AH,02

  :062F B700 MOV BH,00

  :0631 CD10 INT 10

  :0633 BE4009 MOV SI,0940

  :0636 B00E MOV AL,0E

  :0638 A28307 MOV [0783],AL

  :063B E8D800 CALL 0716

  :063E B400 MOV AH,00

  :0640 CD16 INT 16

  :0642 80FC48 CMP AH,48#up

  :0645 740C JZ 0653

  :0647 80FC50 CMP AH,50#down

  :064A 741D JZ 0669

  :064C 80FC1C CMP AH,1C#enter

  :064F 7431 JZ 0682

  :0651 EBEB JMP 063E

  :0653 A08207 MOV AL,[0782]

  :0656 3C01 CMP AL,01

  :0658 7404 JZ 065E

  :065A FEC8 DEC AL

  :065C EB03 JMP 0661

  :065E A08007 MOV AL,[0780]

  :0661 A28207 MOV [0782],AL

  :0664 E86900 CALL 06D0

  :0667 EBD5 JMP 063E

  :0669 A08207 MOV AL,[0782]

  :066C 8A1E8007 MOV BL,[0780]

  :0670 38D8 CMP AL,BL

  :0672 7404 JZ 0678

  :0674 FEC0 INC AL

  :0676 EB02 JMP 067A

  :0678 B001 MOV AL,01

  :067A A28207 MOV [0782],AL

  :067D E85000 CALL 06D0

  :0680 EBBC JMP 063E

电脑

  :0682 A08207 MOV AL,[0782]

  :0685 FEC8 DEC AL

  :0687 B110 MOV CL,10

  :0689 F6E1 MUL CL

  :068B 05000A ADD AX,0A00

  :068E 89C6 MOV SI,AX

  :0690 B442 MOV AH,42

  :0692 B280 MOV DL,80

  :0694 CD13 INT 13

  :0696 80FC00 CMP AH,00

  :0699 7402 JZ 069D

  :069B 7503 JNZ 06A0

  :069D E96075 JMP 7C00

  :06A0 BA0114 MOV DX,1401

  :06A3 B402 MOV AH,02

  :06A5 B700 MOV BH,00

  :06A7 CD10 INT 10

  :06A9 BE9009 MOV SI,0990

  :06AC B004 MOV AL,04

  :06AE A28307 MOV [0783],AL

  :06B1 E86200 CALL 0716

  :06B4 EB88 JMP 063E

  :06D0 A08107 MOV AL,[0781]

  :06D3 3A068007 CMP AL,[0780]

  :06D7 7606 JBE 06DF

  :06D9 B001 MOV AL,01

  :06DB A28107 MOV [0781],AL

  :06DE C3 RET

  :06电脑DF 0401 ADD AL,01#第2行

  :06E1 88C6 MOV DH,AL

  :06E3 B220 MOV DL,20

  :06E5 B402 MOV AH,02

  :06E7 B700 MOV BH,00

  :06E9 CD10 INT 10

  :06EB A08107 MOV AL,[0781]

  :06EE 3A068207 CMP AL,[0782]

  :06F2 7504 JNZ 06F8

  :06F4 B305 MOV BL,05

  :06F6 EB02 JMP 06FA

  :06F8 B308 MOV BL,08

  :06FA 881E8307 MOV [0783],BL

  :06FE FEC8 DEC AL

  :0700 B110 MOV CL,10

  :0702 F6E1 MUL CL

  :0704 059007 ADD AX,0790

  :0707 89C6 MOV SI,AX

  :0709 E80A00 CALL 0716

  :070C A08107 MOV AL,[0781]

  :070F FEC0 INC AL

  :0711 A28107 MOV [0781],AL

  :0714 EBBA JMP 06D0

  :0716 AC LODSB

  :0717 3C00 CMP AL,00

  :0719 740A JZ 0725

  :071B B40E MOV AH,0E

  :071D 8A1E8307 MOV BL,[0783]

  :0721电脑 CD10 INT 10

  :0723 EBF1 JMP 0716

  :0725 C3 RET


电脑