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

📄 disk.inc

📁 自己以前写的 引导扇区代码。包括: fat12.asm fat16.asm fat32.asm
💻 INC
字号:
%ifndef _DISK_INC_
%define _DISK_INC_

;----------------------------------------------------------------------
; 文 件 名: disk.inc
; 版    本: Beta 3
; 说    明: 操作系统磁盘数据结构及关于磁盘操作的函数
; 编    译: NASM 0.98 以上编译器
; 编译命令: 该文件不能被直接编译, 只能被其他程序调用
;					 Bats Studio 2004-7。
;-------------------------------------------------------------------------------
;**************************本文件的函数或数据结构列表***************************
;-------------------------------------------------------------------------------
;   标   识   符	 类型		长度		说明
;   PartTab 	 	Datas		0FH*4	硬盘分区表数据结构
;   Fat12Bpb		Datas		39H	1.44MB软盘盘参数表
;   Fat32Bpb		Datas		57H	FAT32参数表数据结构
;   Fat1xfdt  		Datas		20H	FAT32参数表数据结构
;-------------------------------------------------------------------------------
;************************重要数据的长度或偏移地址申明***************************
;-------------------------------------------------------------------------------
Offset_BootFlag		EQU	0x1fe		;引导标志字的偏移地址
Offset_PARTAB		EQU	0x1be		;分区表的偏移地址
Size_Fat1xMN		EQU	8		;FAT主文件名长度
Size_Fat1xEN		EQU	3		;FAT扩展文件名长度
Size_Fat1xFN		EQU	11		;FAT文件名总长度
Flag_EmptCur		EQU	0		;未使用的空闲簇
Flag_EndCur32		EQU	0xfffffff	;文件的最后一簇
Flag_BadCur32		EQU	0x0ffffff7	;坏簇
Flag_EndCur16		EQU	0x0ffff		;文件的最后一簇
Flag_BadCur16		EQU	0x0fff7		;坏簇
Flag_EndCur12		EQU	0x0ffff		;文件的最后一簇
Flag_BadCur12		EQU	0x0fff7		;坏簇


Size_BytePrSect		EQU	512		;每扇区字节数
Size_DiskSerNO		EQU	4		;磁盘序列号长度
Size_DiskLabel		EQU	11		;磁盘卷标长度
Size_FSysOEM		EQU	8		;磁盘文件分配表类型OEM说明串长

Size_FTimelong		EQU	2		;文件访问时间长度
Size_FDatelong		EQU	2		;文件访问日期长度
Size_BootFname		EQU	11		;启动文件的文件名长度
Size_FatDFI		EQU	32		;每一个目录登记项的长度

Quan_FdSecPreFDB	EQU	1		;1.44MB软盘每个文件数据块(簇)的扇区数
Quan_FatTab		EQU	2		;FAT表的数量
Quan_FdRootFile		EQU	224		;1.44MB软盘根目录的文件数量
Quan_FdSectors		EQU	2880		;1.44MB软盘的扇区总数
Quan_FdSecPretrac	EQU	18		;1.44MB软盘每道扇区数
Quan_FdSecPreFAT	EQU	9		;1.44MB软盘每FAT占扇区数
Quan_FdSecPreRDFI	EQU	14		;1.44MB软盘每跟目录的扇区数

Flag_BootSect		EQU	0xaa55		;引导扇区的可引导标志
Flag_HdiskActive	EQU	0x80		;硬盘活动分区标志
Flag_BATSPART		EQU	0xbf		;Bats文件系统的标志
Flag_Media144		EQU	0xf0		;1.44MB软盘的介质标志
Flag_Extboot144		EQU	0x29		;FAT12标志


DISK_Read		EQU	0x02		;读盘功能号
DISK_ReadOne		EQU	0x201		;读一个扇区
DISK_Write		EQU	0x03		;写盘功能号
DISK_WriteOne		EQU	0x301		;写一个扇区
DISK_ExtCHK		EQU	0x41		;AH=41	检测扩展INT13H
DISK_ExtRead		EQU	0x4200		;扩展读盘


;-------------------------------------------------------------------------------
;结构名:   PartTab
;说  明:   硬盘分区表数据结构
;位  置:
;	硬盘主引导扇区MBR偏移1BEH-1FDH
;	  第1个分区1BEH~1CDH
;	  第2个分区1CEH~1DDH
;	  第3个分区1DBH~1EDH
;	  第4个分区1EFH~1FDH
;长  度:
;	每个物理硬盘有4个分区表,每个表项长度为16(0FH)字节,总长度为64字节
;-----------------------------------------------------------------------
.struc	PART_TAB
	char	PT_BootFlag	; 引导标志字			1字节
	char	PT_StartTra	; 分区起始磁道号		1字节
	char	PT_StartSec	; 高2位为分区起始柱面号的高位	1字节
				; 底6位为分区起始扇区号		1字节
	char	PT_StarHead	; 分区起始柱面号的低8位		1字节
	char	PT_SystFlag	; 操作系统标志			1字节
	char	PT_EndTrack	; 分区结束磁头号		1字节
	char	PT_EndSectt	; 高2位为分区结束柱面号的高位	1字节
				; 底6位为分区结束扇区号 	1字节
	char	PT_EndHeadn	; 分区结束柱面号的低位		1字节
	ulong	PT_LStasect	; 磁盘起始扇区的绝对扇区号	4字节
	ulong	P1_LMaxSect	; 磁盘扇区数			4字节
.endst	PART_TAB
;-----------------------------------------------------------------------
;结构名:Fat12Bpb
;说  明:1.44MB软盘盘参数表
;位  置:      
;       软盘引导扇区偏移 03H-3BH
;长  度:
;       共占用57(39H)字节
;-----------------------------------------------------------------------
.struc	Fat12Bpb		;磁盘BPB数据表		 	占用59字节
  	char		BP12_SysOEM,8	;				8字节
	unsigned	BP12_BytPSec	; 字节/扇区			2字节
	char		BP12_SecPCur	; 每个簇占用扇区数		1字节
	unsigned	BP12_ResaSec	; 保留扇区数			2字节
	char		BP12_FatQuan	; 有几个FAT表			1字节
	unsigned	BP12_RootQua	; 根目录文件个数		2字节
  	unsigned	BP12_AllSect	; 磁盘总扇区数			2字节
	char		BP12_Media	; 磁盘介质描述			1字节
	unsigned	BP12_SecPFAT	; 每个FAT占用扇区数		2字节
	unsigned	BP12_SecPTrc	; 每道扇区数			2字节
	unsigned	BP12_HeadQua	; 磁盘柱面数			2字节
	ulong		BP12_Hidden	; 隐含扇区数			4字节
	ulong		BP12_Secttors	; 大容量磁盘的总扇区数		4字节
	char		BP12_DriveNO	; 驱动器号			1字节
 	unsigned	BP12_Extflag	; 扩展引导标志			2字节
	ulong		BP12_SerNO	; 磁盘序列号			4字节
	char		BP12_Label,11	; 磁盘卷标			11字节
	char		BP12_FSOEM,8	; 文件分配表类型		8字节
.endst	Fat12Bpb

%ifdef abcdefadsfdsa
;----------------------------------------------------------------------
;结构名:FAT32Bpb
;说  明:FAT32参数表数据结构
;位  置:
;       位于该分区引导扇区偏移03H-59H
;长  度:
;       共占用87(57H)字节
;----------------------------------------------------------------------
Fat32Bpb	struc
  BP32_SysOEM	DB Size_FSysOEM DUP(0)  ;			03-0AH	8字节
  BP32_BytPSec	DW Size_BytePrsect	; 字节/扇区		0B-0CH	2字节
  BP32_SecPCur	DB	0		; 每个簇扇区数		0DH	1字节
  BP32_ResaSec	DW	0		; 保留扇区数		0E-0Fh	2字节
  BP32_FatQuan	DB	0		; FAT表数		10H	1字节
  BP32_RootQua	DW	0		; 根目录文件数FAT32为0	11-12H	2字节
  BP32_AllSect	DW	0		; 磁盘总扇区数		13-14H	2字节
  BP32_Media	DB	0		; 磁盘介质描述		15H	1字节
  BP32_SecPFAT	DW	0		; 每个FAT占用扇区数	16-117H	2字节
  BP32_SecPTrc	DW	0		; 每道扇区数		18-19H	1字节
  BP32_HeadQua	DW	0		; 磁盘柱面数		1A-1BH	2字节
  BP32_Lstasect	DD	0		; 磁盘的起始扇区号	1C-1FH	4字节<----只限于大容量磁盘
  BP32_LowSect	DD	0		; 磁盘的总扇区数	20-23H	4字节<----只限于大容量磁盘
  BP32_LFatPse	DD	0		; 磁盘FAT扇区数		24-27H	4字节<----只限于大容量磁盘
  BP32_Unkno1	DB 18H DUP (0)		; 未知的数据		28-3FH 24字节<----未知的数据
  BP32_DriveNO	DB	0		; 驱动器号		40H	1字节
  DB32_unkno2	DB	0		;			41H	1字节<----未知的数据
  BP32_SysFlag	DB	29H		; 扩展引导标志		42H	1字节
  BP12_SerNO	DB Size_DiskSerNO Dup(0); 磁盘序列号		4字节
  BP12_Label	DB Size_DiskLabel Dup(0); 磁盘卷标		11字节
  BP12_FSysOEM	DB Size_FSysOEM   DUP(0); 文件分配表类型	8字节
Fat32Bpb	ends
;-----------------------------------------------------------------------
;结构名:   Fatfdt
;说  明:   FAT12、FAT16目录登记项的数据结构
;长  度:   32(024H)字节
;-----------------------------------------------------------------------
Fat1xfdt	struc
   F1x_MainName	DB	Size_Fat1xME DUP(0)
					;00H-07H主文件名
					;其中00H字节有如下特殊含义
					;    00H表示该表位空,未使用
					;    E5H文件已被删除
					;    05H表示该字节的真值为 E5H
   F1x_ExtName	DB	Size_Fat1xEM DUP(0)
					;08H-0AH扩展文件名
   F1x_FAttrib	DB	0		;文件属性字节
					;Bit7~B6 保留
					;Bit5 归档位 
					;Bit4 子目录(代表该文件是一个目录或叫文件夹) J,
					;Bit3 卷标(卷标也解释为一种特殊的文件) 6GZE
					;Bit2 系统文件 
					;Bit1 隐藏文件 
					;Bit0 只读文件 
   F1x_Resaved	DB	10 DUP(0)	;0CH~15H 保留字节
   Fax_EChgTime	DB	Size_FTimelong DUP(0)
					;16H~17H 文件最后修改时间
					;16H字节的0~4位是以2秒为增量的秒
					;16H字节的5~7位和17H字节的0~2位是分钟
					;17H字节的3~7位是小时
   F1x_EChgDate	DW	Size_FTimelong DUP(0)
					;18H-19H 文件最后修改日期
					;18H字节0~4位是天号
					;18H字节5~7位和19H字节0位是月份
					;19H字节的1~7位为年号,0~119分别代表1980~2099
   F1x_FirstCur	DW	0		;1AH~1BH文件的起始簇号
   F1x_FileLong	DD	0		;1CH~1FH文件的长度(字节)
Fat1xfdt	ends
;------------------------------------------------------------------------
%endif
%endif

⌨️ 快捷键说明

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