這是寫于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
:06DF 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
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!