📄 00000009.htm
字号:
MOV AX,0201H ; ah=2,读扇区; al:读扇区数目
<BR> INT 13H ; 装入
<BR> JB _0171
<BR> CMP WORD PTR [BX+01FEH],0AA55H ; 该硬盘有效?
<BR> JNZ _0171
<BR> DB 0EAH ;
<BR> DB 00H,07CH ; jmp 0:7c00h
<BR> DB 00H,00H ;
<BR>_0160:
<BR> CMP DL,081H ; 第二硬盘?
<BR> JZ _0167
<BR> MOV DL,080H ; 第一硬盘?
<BR>_0167:
<BR> MOV BP,DX
<BR> INC DX
<BR> XOR DL,0B3H
<BR> DB 88H,16H ; mov [073ah],dl
<BR> DB 3AH,07H ; disk ?; 81h^b3h=32h,82h^b3h=31h
<BR>_0171:
<BR> MOV DI,07BEH ; 分区表起始地址
<BR> MOV CX,0004 ; 分区数目
<BR> DB 0C6H,06H ;
<BR> DB 2DH,07H ; mov [072dh],31h
<BR> DB 31H ;
<BR> XOR DH,DH
<BR>_017E:
<BR> MOV [DI],CH
<BR> MOV AL,[DI+04] ; 分区类型
<BR> CMP AL,00 ; 空表项,跳过
<BR> JZ _01AA
<BR> CMP AL,05 ; 扩展分区,跳过
<BR> JZ _01AA
<BR> INC DH
<BR> MOV SI,072AH ; 显示: F# . . .
<BR> CALL _0204
<BR> MOV SI,0748H ; 装入OS名字索引表地址
<BR>_0196:
<BR> INC SI
<BR> INC SI
<BR> MOV BX,[SI]
<BR> OR BH,BH
<BR> JZ _01A3 ; OS名字搜索完,未找到,显示: ??
<BR> XOR BH,[DI+04] ; 分区类型代码与该OS代码比较
<BR> JNZ _0196
<BR>_01A3:
<BR> LEA SI,[BX+0772H] ; 显示该分区类型OS名称
<BR> CALL _0204
<BR>_01AA:
<BR> ADD DI,010H ; 下一个表项
<BR> DB 0FEH,06H ; inc [072dh]
<BR> DB 2DH,07H ; 当前分区增量
<BR> LOOP _017E
<BR> DB 80H,3EH ;
<BR> DB 75H,04H ; cmp byte ptr [0475h],02
<BR> DB 02H ; BIOS数据区0:475h存放硬盘数量
<BR> JZ _01C5
<BR> MOV SI,073BH
<BR> OR DH,DH
<BR> JNZ _01CB
<BR> INT 18H ; 没有一个分区有效,进入ROM BASIC
<BR> JMP _0171
<BR>_01C5:
<BR> MOV SI,072AH ; 若是两个硬盘,显示: F5 . . . disk 2(or 1)
<BR> CALL _0204
<BR>_01CB:
<BR> CALL _0204 ; 显示: Default F#
<BR>_01CE:
<BR> XOR AH,AH
<BR> INT 1AH ; 读实时时钟
<BR> MOV BX,DX
<BR> ADD BX,060H ; 设置等待时间(约3秒)
<BR>_01D7:
<BR> MOV AH,01
<BR> INT 16H ; 是否有键盘输入?
<BR> MOV AH,00 ; 把这条语句放在这里节省了一条指令:-)
<BR> JNZ _01EA ; 有,跳转
<BR> INT 1AH ; 无,读时钟
<BR> CMP DX,BX ; 等待时间到?
<BR> JB _01D7 ; 没有,继续循环
<BR>_01E5:
<BR> DB 0A0H ; mov al,[0748h]
<BR> DB 48H,07H ; 默认启动分区
<BR> JMP _01F4
<BR>_01EA:
<BR> INT 16H
<BR> MOV AL,AH ; 返回: al:ascii码,ah:扫描码
<BR> CMP AL,01CH ; 回车?
<BR> JZ _01E5 ; 是,转Default
<BR> ADD AL,0F6H ; F1的扫描码:3bh,加f6h为31,对应ascii码1...
<BR>_01F4:
<BR> CMP AL,031H
<BR> JB _01CE
<BR> CMP AL,035H
<BR> JA _01CE ; 非F1-F5,重新开始读
<BR> PUSH AX
<BR> MOV SI,0728H
<BR> MOV BX,061BH
<BR> PUSH BX ; 跳到_011B
<BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -