版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 磁盘文件本章将讨论磁盘数据的组织,如何调用DOS和BIOS的中断服务程序访问磁盘等。在这里说明DOS的INT 21H功能调用中关于磁盘文件操作分为两组,一组是使用文件控制块(FCB)对文件进行操作,占用0F23H子功能号,这是一种旧式文件操作方式,这里不予介绍;另一组是使用文件号方式,这是和UNIX操作系统类似的文件操作方式,本章将介绍这种文件操作方式。8.1 磁盘数据组织一、 磁道、柱面和扇区扇区磁盘分为软盘和硬盘,软盘是在一种软塑料基片上涂有磁性材料,硬盘则是在刚性材料上图一层磁性材料。无论软盘还是硬盘都分为磁道和扇区,图811展示了磁盘表面上的磁道和扇区的结构和组织情况。磁道图8
2、11 磁盘磁道和扇区一张磁盘划分为多个磁道,每个磁道有划分若干的扇区。越靠近圆心的磁道的周长越小,但是每个磁道划分的扇区数是相同的。一张磁盘划分为多少磁道和扇区不同类型的磁盘有所不同。硬盘一般由多个盘片组成,每个盘片的同一位置的磁道组成一个柱面。二、磁盘数据组织一张磁盘被分成四个区域,它们分别是引导扇区、文件分配表(FAT)、根目录和数据存储区。1引导扇区磁盘上的第一个扇区为引导扇区。引导扇区内包含了一个称为引导纪录(Boot Record)的程序,当启动计算机时,计算机自检后执行INT 19H服务程序,将引导纪录装入内存,然后执行该程序。引导程序的执行结果是将DOS系统文件IO.SYS 、M
3、SDOS.SYS和COMMAND.COM装入内存,然后执行COMMAND.COM程序,此时计算机处于DOS命令程序控制之下。2文件分配表(FAT) 磁盘存储数据以簇(cluster)为单位分配磁盘空间,一个簇包含一个或几个扇区。.对于软盘一个簇一般只有一个扇区,硬盘一个簇往往有4个、8个扇区等。如果一个簇有4个扇区,则一个簇包含2K字节,即使一个文件的实际长度小于2K,在磁盘上也要占用2K字节空间。一个簇有一顺序编号,称为簇号。当将文件存入磁盘时,根据文件大小给文件分配一个或几个簇,所以磁盘空间是以簇为单位分配的。文件分配表记录磁盘簇的分配情况,它由若干项组成,每一项和一个簇相对应,占用16位
4、或32位。簇0簇1簇2簇3簇n指向目录区指向数据区分配表的某一项值为0000H时,表示该簇为空簇,为FFF7H时,表示该簇是一个坏簇,如果值为0001H0FFFEH表示该簇已分配。当一个文件占用多个簇时,从文件所分配的第一个簇起,每一项存放的是文件所分配的下一个簇号。16位文件分配表能存放的最大值是0FFFEH,所以使用16位文件分配表磁盘最多只能有0FFFEH=1024*64个簇,假如一个簇有12个扇区,则磁盘最大空间为512*8*1024*64=384M。所以对于大容量硬盘应使用32位文件分配表。文件分配表在磁盘上存有两份。3根目录区根目录区存放磁盘文件根目录下的文件或子目录有关信息,根目
5、录的每一项占用32字节,其含义如下:07H 文件名80AH 文件扩展名0BH 文件属性0CH15H 未用16H17H 时间 18H19H 日期1AH1BH 文件开始簇号1CH1EH 文件长度 4数据区存放文件内容。8.2 文件操作一、文件操作的DOS系统功能调用文件操作可以调用DOS 的INT 21H系统功能。DOS操作系统文件操作有两种方式:使用文件控制块方式和使用文件号存取方式。使用文件控制块方式需要建立一个文件控制块,然后才能对文件进行操作。文件控制块方式最大的缺点是不支持树形目录结构,因此在后期版本增加了使用文件号的存取方式。所谓文件号存取方式,就是DOS操作系统为每一个使用中的文件分
6、配一个16位的文件号,以后就使用文件号进行操作。DOS系统文件操作功能:3CH 建立文件子功能调用参数返回参数3CH 建立文件DS=文件名的段基址DX=文件名的偏移地址CX=文件属性CF=0操作成功AX=文件号CF=1操作出错AX=错误代码3DH 打开文件DS=文件名的段基址DX=文件名的偏移地址AL=存取代码CF=0操作成功AX=文件号CF=1操作出错AX=错误代码3EH 关闭文件BX =文件号CF=0操作成功CF=1操作出错AX=错误代码3FH 读文件DS=数据缓冲区的段基址DX=数据缓冲区的偏移地址BX =文件号CX=读取字节数CF=0操作成功AX=实际读出字节数AX=0文件结束CF=1
7、读出错AX=错误代码40H 写文件DS=数据缓冲区的段基址DX=数据缓冲区的偏移地址BX =文件号CX=写入字节数CF=0操作成功AX=实际写入字节数CF=1写出错AX=错误代码42H 移动文件指针CX:DX=所需字节数AL=方式BX =文件号CF=0操作成功DX:AX=新指针位置CF=1写出错AX=错误代码43H 检验或改变文件属性二、路径名和文件名文件号存取文件方式支持树形目录结构,对文件进行操作首先应当将带有路径的文件名所组成的字符串装入内存,这个字符串的最后一个字节为0,的并将DS:DX指向这个地址。例如数据段定义:FILE_1 DB “C:MYFILESAMPL.TXT”,0代码段对
8、文件操作之前要执行下面指令:MOV AX, SEG FILE_1MOV DS, AXMOV DX, OFFSET FILE_1路径和路径之间,以及路径和文件名之间分割可以用“/”或“”,字串最大长度63个。三、 文件代号和错误代码DOS操作系统为每一个打开的文件分配了一个文件号。对于外部设备采用文件驱动方式,即为每一个外部设备预分配一个文件号,这样就可以相对磁盘文件那样对外部设备进行读写操作。DOS预分配的文件号为:0 标准输入设备1 标准输出设备2 标准错误输出设备3 标准辅助设备4 标准打印设备我们建立或打开的文件文件号从5号开始。当对文件操作失败时,标志位CF置1,AX寄存器返回错误代码
9、。错误代码及其含义可查阅有关手册。四、文件属性文件属性的含义如下:01 只读文件02 隐含文件03 系统文件04 卷文件,软盘的卷标号10 子目录20 归档文件8.3 顺序文件操作一、建立新文件建立新文件调用DOS系统3CH子功能。调用时首先应将DS:DX指向存放带有路径的文件名字符串缓冲区,置文件属性代码到CX寄存器。程序示例:该程序建立一个新文件,其操作步骤为:1接收有键盘输入的文件名;2 调用3CH子功能建立该文件;3 接收键盘输入的文件内容到BUFF缓冲区;4 调用40H子功能将BUFF缓冲区内容写入磁盘;5 调用3EH子功能关闭文件。.model small.data messeg1
10、 db Input file name:,0dh,0ah, $ messeg2 db Input text:,0dh,0ah,$ file_point db 63 dup (0) buff db 128 dup (?)prompt macro mess ;提示信息输出宏定义 mov dx, offset mess mov ah, 09h int 21hendmreturn macro ;回车换行操作宏定义 mov dl, 0dhmov ah,02hint 21hmov dl, 0ahint 21hendm.code start: mov ax, data mov ds, ax prompt m
11、esseg1 ;调用宏提示输入文件名 mov si, offset file_point ;下面过程输入文件名 l1: mov ah, 01h int 21h cmp al, 0dh ;输入回车结束 je l2 mov si, al inc si jmp l1 l2: mov si, byte ptr 0 ;文件名字串最后字节置0 mov cx, 0 ;置文件属性 mov dx, offset file_point ;ds:dx指向文件名字符串 mov ah, 3ch ;调用3ch子功能建立文件 int 21h mov bx, ax ;文件号传送bx寄存器 prompt messeg2 ;提示
12、输入文件内容 mov cx, 0 ;下面过程输入文件内容 mov si, offset buff l3: mov ah, 01h int 21h cmp al, 1bh ;是ESC键否?1bh为ESC键ASCII码 je l4 ;是结束输入 mov si, al inc si inc cx cmp al, 0dh ;是回车键否 jne l6 ;否,继续 return ;使,输出回车换行 inc si mov si, byte ptr 0ah ;存入换行代码 inc cx l6: jmp l3 l4: mov dx, offset buff ;写文件 mov ah, 40h int 21h mo
13、v ah, 3eh ;关闭文件 int 21h mov ah, 4ch int 21hend start 本程序建立的文件是标准的文本文件,每行之间用回车换行代码0dh和0ah分隔。 二、 读文件读文件文件首先应调用DOS系统3DH子功能打开文件。调用该功能时调用时应将DS:DX指向文件名字符串,将打开方式至于AL寄存器。0 以读方式打开文件1 以写方式打开文件2 以读写方式打开文件程序示例:程序操作步骤为:1 调用3H子功能以只读方式打开文件;2 用3fH子功能将文件读入将BUFF缓冲区;3 用3EH子功能关闭文件;4 输出BUFF缓冲区数据。.model small.data file_p
14、oint db ex832.asm,0 buff db 512 dup (?).code start: mov ax, data mov ds, ax mov cx, 0 mov dx, offset file_point mov ah, 3dh mov al, 0 ;al=打开方式 int 21h mov bx, ax ;文件号传送bx寄存器 mov dx, offset buff mov cx, 512 mov ah, 3fh ;调用3fh子功能读文件 int 21h mov ah, 3eh ;关闭文件 int 21h mov bx, offset buff ;输出文件内容 l1: mov
15、 dl, bx mov ah, 02h int 21h inc bx loop l1 mov ah, 4ch int 21hend start为了避免程序过于复杂,本程序只从文件中读取512字节数据,如何将整个文件读出可参8.5程序。8.4 以文件方式的输入输出操作DOS操作系统启动时打开了5个设备文件,其中文件号0分配给标准输入设备文件,即键盘;将文件号1分配给标准输出设备文件,一般是显示器。所以可以以文件方式进行键盘输入和显示输出操作。程序示例:调用40H写文件子功能在显示器上输出字符串。.model small.data str db 0dh, 0ah, How are you! cou
16、nt equ $-offset str.code start: mov ax, data mov ds, ax mov bx, 1 ;标准输出设备文件号1送BX寄存器 mov dx, offset str ;DS:DX指向输出缓冲区 mov cx, count ;输出字符输送CX寄存器 mov ah, 40h ;调用40h子功能 int 21h mov ah, 4ch int 21hend start使用标准设备文件不用打开和关闭操作,其操作由系统自动完成。程序示例二:该程序建立一个新文件,并接受键盘输入将其写入新建立的文件中。提示信息的显示和接收键盘输入均使用文件驱动方式。.model sm
17、all.data messeg1 db Input file name: count1 equ $-offset messeg1 messeg2 db 0dh,0ah,Input text: count2 equ $-offset messeg2 file_point db 63 dup (0) buff db 128 dup (?).code start: mov ax, data mov ds, ax mov bx, 1 mov dx, offset messeg1 mov cx, count1 mov ah, 40h int 21h ;调用40h显示提示信息 mov bx, 0 mov
18、cx, 63 mov dx, offset file_point mov ah, 3fh int 21h ;调用40h功能接收键盘输入的文件名 mov cx, 0 mov dx, offset file_point mov ah, 3ch int 21h ;建立新文件 push ax mov bx, 1 mov dx, offset messeg2 mov cx, count2 mov ah, 40h int 21h ;显示提示信息 mov bx, 0 mov cx, 128 mov dx, offset buff mov ah, 3fh int 21h ;键盘输入文件内容 mov cx, a
19、x pop bx mov ah, 40h ;写磁盘文件 int 21h mov ah, 3eh ;关闭文件 int 21h mov ah, 4ch int 21hend start 8.5 随机文件操作DOS系统功能调用42H子功能为移动文件指针。当打开一个文件时,系统自动给文件设立了一个文件指针,指向文件的第一个字符。从文件中读取一个字符时,读出的是当前指针所指的字符,然后将指针移向下一个字符。调用42H子功能可以将文件指针移到文件的某以位置。调用42H子功能应将文件号至于BX寄存器,将移动的字节数置于CX:DX寄存器,CX为移动的字节数的高位,DX为移动的字节数的低位,移动字节数可以去正值
20、也可以去负值,将指针移动方式码至于AL寄存器,其移动方式为:AL=0 从文件首开始移动;AL=1 从当前文件文件指针位置移动;AL=2 从文件尾开始移动;程序示例一:建立新文件,将5名同学的姓名和住址写入磁盘文件ST.TXT.model smallprompt macro x, str ;输出提示字符串宏定义 push cx push dx push ax push bx mov cx, x mov dx, offset str mov bx, 1 mov ah, 40h int 21h pop bx pop ax pop dx pop cx endm input macro y, str2
21、;输入字符串宏定义 push dx push cx push bx push ax mov dx, offset str2 mov cx, y mov bx, 0 mov ah, 3fh int 21h pop ax pop bx pop cx pop dx endm.data messeg1 db 0dh,0ah,Input name: count1 equ $-offset messeg1 messeg2 db 0dh,0ah,Input address: count2 equ $-offset messeg2 file_point db st.txt,0 stuname db 10 du
22、p (?) stuadd db 20 dup (?) count3 equ $-offset stuname.code start: mov ax, data mov ds, ax mov cx, 0 mov dx, offset file_point mov ah, 3ch int 21h ;以只读方式打开文件 mov bx, ax mov dx, offset stuname mov cx, 3 l1: prompt count1, messeg1 ;输入纪录 input 10, stuname prompt count2, messeg2 input 20, stuadd push cx
23、 mov cx, count3 mov ah, 40h ;向文件中写一条纪录 int 21h pop cx loop l1 mov ah, 3eh int 21h mov ah, 4ch int 21hend start 程序示例二:输入纪录号将该纪录的学生姓名和住址打印出来。.model smallprompt macro x, str 输出提示字符串的宏定义 push cx push dx push ax push bx mov cx, x mov dx, offset str mov bx, 1 mov ah, 40h int 21h pop bx pop ax pop dx pop c
24、x endm.data messeg1 db 0dh,0ah,Input record number: count1 equ $-offset messeg1 file_point db st.txt,0 stuname db 10 dup (?) stuadd db 20 dup (?) count2 equ $-offset stuname.code start: mov ax, data mov ds, ax mov al, 0 mov dx, offset file_point mov ah, 3dh int 21h ;以只读方式打开文件 mov bx, ax prompt count1, messeg1 mov ah, 01h int 21h ;输入查询纪录号 mov ah, 0 and al, 0fh dec al mov cx, count2 mul cx mov dx, ax ;计算指针 mov cx, 0 mov al, 1 mov ah, 42h ;移动指针 int 21h mov cx, count2 mov dx, offset stuname mov ah, 3fh int 21h ;读一条纪录 prompt count2, s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目总工程师面试问题及答案
- 心理咨询师健康心理学模拟真题及答案
- 长沙网约车从业资格证考试试题及答案
- 野生动物饲养繁殖工岗前实操评优考核试卷及答案
- 知识产权侵权诉讼试题及答案
- 医疗器械临床试验项目检查要点及判定原则培训考试及答案
- 中储粮质量检验岗位面试题及答案
- 中职第三学年(运输管理)货物运输路线规划2026年阶段测试题及答案
- 2025年广西壮族自治区防城港市初二生物上册期中考试试卷及答案
- 2025年广东省汕尾市初一语文上册期中考试试卷及答案
- 2025数据基础设施用户身份管理和接入要求
- 服装店装修施工方案范本
- 甘肃省培训费管理办法
- 认识花生课件
- 【《基于java的美妆商城的设计与实现》13000字】
- 白银市2025-2026学年七年级上学期语文月考测试试卷
- 毕业论文8000字范例学前教育
- 浙江省公路工程监理用表-监理抽检记录2025
- 理想汽车考试试题及答案
- 先心病的介入治疗与护理
- 成人高考高起专模拟试题
评论
0/150
提交评论