📄 disk.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 + -