⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mbrbm.lis

📁 PC BIOS Boot Manager _within_ the Master Boot Record (MBR) Displays list of partitions and let user
💻 LIS
📖 第 1 页 / 共 4 页
字号:
   520 00000091 B94000                  	MOV	CX, NPARTL   521 00000094 F3A4                    	REP	MOVSB   522 00000096 C3                      	RET   523                                     524                                  ; read from disc via bios, return code AH   525                                  READ_DISC:   526 00000097 B80102                  	MOV	AX, READ1		; read one sector   527 0000009A BB0076                  	MOV	BX, LOADADR		; into load area   528 0000009D CD13                    	INT	DISC   529 0000009F 720A                    	JB	READ_DISK_RET		; disc error   530 000000A1 813EFE7755AA            	CMP	WORD [LOADADR+SIGNUM], MAGIC   531 000000A7 7402                    	JZ	READ_DISK_RET		; no valid partition table   532 000000A9 B4FF                    	MOV	AH, 0xFF   533                                  READ_DISK_RET:   534 000000AB C3                      	RET   535                                     536                                  ; display *SI -> display   537                                  PUTS:   538                                  NEXT_CHAR:   539 000000AC AC                      	LODSB   540 000000AD 08C0                    	OR	AL, AL			; last char ='\0'?   541 000000AF 7429                    	JZ	NEXT_CHAR_RET   542 000000B1 B40E                    	MOV	AH, PUTC		; next char   543 000000B3 BB0700                  	MOV	BX, CNTRL		; control word tty emulation   544 000000B6 56                      	PUSH	SI   545 000000B7 CD10                    	INT	VIDEO   546 000000B9 5E                      	POP	SI   547 000000BA EBF0                    	JMP	NEXT_CHAR   548                                     549                                  ; convert dec -> ascii, AX -> [--DI], max 2550!   550                                  CONVERT:   551 000000BC B720                    	MOV	BH, ' '			; overwrite five chars   552 000000BE 887DFC                  	MOV	[DI-4], BH		; with blanc   553 000000C1 887DFD                  	MOV	[DI-3], BH		; with blanc   554 000000C4 887DFE                  	MOV	[DI-2], BH		; with blanc   555 000000C7 887DFF                  	MOV	[DI-1], BH		; with blanc   556 000000CA B50A                    	MOV	CH, 10			; decimal base   557                                  NEXT_DIGIT:   558 000000CC F6F5                    	DIV	CH			; next modulu   559 000000CE 80C430                  	ADD	AH, '0'			; ascii conversion   560 000000D1 8825                    	MOV	[DI], AH		; put in string   561 000000D3 4F                      	DEC	DI			; next position   562 000000D4 30E4                    	XOR	AH, AH			; clear high byte   563 000000D6 08C0                    	OR	AL, AL			; was last digit?   564 000000D8 75F2                    	JNZ	NEXT_DIGIT   565                                  NEXT_CHAR_RET:   566 000000DA C3                      	RET   567                                     568                                  ; analyse partition table   569                                  ANALYSE_TABLE:	   570 000000DB BD[BE01]                	MOV	BP, PART_TAB		; si = *partititon table   571 000000DE B90400                  	MOV	CX, NPARTN		; search active partition 0..3   572                                  NEXT_PART:   573 000000E1 51                      	PUSH	CX   574 000000E2 B020                    	MOV	AL, ' '			; default not active   575 000000E4 F6460080                	TEST	BYTE [BP], SDEV		; partition active?   576 000000E8 740F                    	JZ	NOT_ACTIVE   577 000000EA A0[6F00]                	MOV	AL, [ACTIVE]		; active partition already found?   578 000000ED 343F                    	XOR	AL, INVPART		; no more marked invalid   579 000000EF 7506                    	JNZ	SCND_ACTIVE		; second active found   580 000000F1 A0[5D00]                	MOV	AL, [PART]		; remember active partition   581 000000F4 A2[6F00]                	MOV	[ACTIVE], AL   582                                  SCND_ACTIVE:   583 000000F7 B042                    	MOV	AL, 'B'			; mark with 'B'   584                                  NOT_ACTIVE:   585 000000F9 A2[5E00]                	MOV	[ACTIND], AL		; set active indicator   586 000000FC 8A4604                  	MOV	AL, [BP+P_SYS]		; display system identification   587 000000FF 30E4                    	XOR	AH, AH   588 00000101 BF[6400]                	MOV	DI, SYSID   589 00000104 E8B5FF                  	CALL	CONVERT   590 00000107 8B460E                  	MOV	AX, [BP+P_SIZE+2]	; display partition size in GB   591 0000010A C1F805                  	SAR	AX, 5   592 0000010D 40                      	INC	AX			; round up gb   593 0000010E BF[6B00]                	MOV	DI, MEGBYTE   594 00000111 E8A8FF                  	CALL	CONVERT   595 00000114 BE[5900]                	MOV	SI, PARTITION		; display partition information   596 00000117 E892FF                  	CALL	PUTS   597 0000011A 83C510                  	ADD	BP, BYTE PARTL		; next partition   598 0000011D FE06[5D00]              	INC	BYTE [PART]   599 00000121 59                      	POP	CX   600 00000122 E2BD                    	LOOP	NEXT_PART   601 00000124 C3                      	RET   602                                     603                                  ; invalid message   604                                  INVALID:   605 00000125 BE[7300]                	MOV	SI, INVTABLE		; issue error message   606                                  ; get partition   607                                  GET_PART:   608 00000128 E881FF                  	CALL	PUTS   609                                  ; wait for key or timeout   610                                  WAIT_KEY:   611 0000012B 30E4                    	XOR	AH, AH   612 0000012D CD1A                    	INT	RTIME   613 0000012F 89D3                    	MOV	BX, DX			; init wait counter   614 00000131 83C32C                  	ADD	BX, BYTE WAITC   615                                  KEY_PRESSED:   616 00000134 B401                    	MOV	AH, KEYBST		; wait for key pressed or timeout   617 00000136 CD16                    	INT	KEYB   618 00000138 750B                    	JNZ	GET_CHAR		; key pressed?   619 0000013A 30E4                    	XOR	AH, AH   620 0000013C CD1A                    	INT	RTIME   621 0000013E 39D3                    	CMP	BX, DX			; timeout?   622 00000140 7FF2                    	JG	KEY_PRESSED   623 00000142 E90700                  	JMP	CHECK			; timeout, load active partition   624                                  ; get pressed key from buffer   625                                  GET_CHAR:   626 00000145 B400                    	MOV	AH, KEYBK		; get pressed key   627 00000147 CD16                    	INT	KEYB   628 00000149 A2[6F00]                	MOV	[ACTIVE], AL		; remember active   629                                  ; check partition validity   630                                  CHECK:   631 0000014C BE[6F00]                	MOV	SI, ACTIVE		; type boot partition   632 0000014F E85AFF                  	CALL	PUTS   633 00000152 A0[6F00]                	MOV	AL, [ACTIVE]		; get active or pressed   634 00000155 2C30                    	SUB	AL, '0'			; check partition number 0..7   635 00000157 7CCC                    	JL	INVALID   636 00000159 3C07                    	CMP	AL, HIGPART   637 0000015B 7FC8                    	JG	INVALID   638 0000015D C606[5900]31            	MOV	BYTE [DRIVE], '1'	; build drive number   639 00000162 3C04                    	CMP	AL, 4			; 0..3 drive 0, 4..7 drive 1   640 00000164 801E[5900]00            	SBB	BYTE [DRIVE], 0		; drive number ascii   641 00000169 250300                  	AND	AX, 00003		; partition number MOD 4   642 0000016C B104                    	MOV	CL, 4			; partition number * PARTL   643 0000016E D3E0                    	SHL	AX, CL   644 00000170 05[BE01]                	ADD	AX, PART_TAB		; build partition table entry adress   645 00000173 89C5                    	MOV	BP, AX			; partition table entry adress   646 00000175 E806FF                  	CALL	READ_TABLE		; read partition table from drive   647 00000178 08E4                    	OR	AH, AH			; read ok?   648 0000017A 75A9                    	JNZ	INVALID   649                                     650                                  ; boot partition   651                                  BOOT_PART:   652 0000017C 386604                  	CMP	[BP+P_SYS], AH		; partition empty?   653 0000017F 74A4                    	JZ	INVALID   654 00000181 A0[5900]                	MOV	AL, [DRIVE]		; get first partition block for os boot   655 00000184 0450                    	ADD	AL, DRIVE0-'0'		; ascii -> 080   656 00000186 884600                  	MOV	[BP], AL		; build head, sector adress   657 00000189 8B4E02                  	MOV	CX, [BP+P_SEC]   658 0000018C 8B5600                  	MOV	DX, [BP]   659 0000018F E805FF                  	CALL	READ_DISC		; read operating system bootstrap   660 00000192 08E4                    	OR	AH, AH			; read ok?   661 00000194 758F                    	JNZ	INVALID   662                                     663                                  ; set proper environment for os boot   664 00000196 81C50006                	ADD	BP, COPYLOC		; di, si, bp = partition table entry   665 0000019A 89EE                    	MOV	SI, BP			; nessessary? perhaps XENIX?   666 0000019C 89EF                    	MOV	DI, BP   667                                     668                                  ; set segment pointers to 0   669 0000019E 31C0                    	XOR	AX, AX   670 000001A0 8ED0                    	MOV	SS, AX   671 000001A2 8ED8                    	MOV	DS, AX   672 000001A4 8EC0                    	MOV	ES, AX   673 000001A6 BC007C                  	MOV	SP, LOADLOC   674 000001A9 89E3                    	MOV	BX, SP   675                                     676 000001AB EA007C0000              	JMP	0:LOADLOC		; boot operation system via far jump   677                                  					; into bootstrap   678                                     679                                  ; data until end of block   680                                  VOLUMEID:   681 000001B0 FF<rept>                	TIMES	BCODEL-$+MBRBR0	DB 0xFF	; filler for VolumeID   682                                     683                                  PART_TAB:   684 000001BE 00<rept>                	TIMES	NPARTL		DB 0	; partition table   685                                     686                                  SIG_NUM:   687 000001FE 55AA                    	DW	MAGIC			; magic word   688                                     689                                  ; END-OF-MBRBM

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -