汇编知识点之磁盘文件存取技术

1.文件代号式磁盘存取
(1)两个重要的表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)简要说明:
文件代号式存取方式将有关文件的各种信息都包括在DOS中。 在处理指定文件时必须使用一个完整的路径名,一旦文件的路径名被送入操作系统,就被赋予一个简单的文件代号,这个文件代号是一个16位的数(16位的二进制)。以后对文件进行读写操作时,就用这个文件代号去查找相应的文件。对于每一个打开的文件,DOS还为其管理一个读写指针,读写指针总是指向下一次要存取的文件中的字节,这个读写指针可以移动到文件的任意位置,从而能满足随机存取的要求。

将指针指向开头位置的两种方法:
   ①关闭文件,重新打开此文件
   ②利用DOS相应的功能调用

(3)路径名和ASCIZ串

ASCIZ串包括文件的路径名和一个全0的字节。
ASCIZ串的地址装在DX寄存器中。
路径名说明文件的位置,包括磁盘驱动器、目录路径和文件名。
例:PN DB  ‘D:\ABC.TXT’,00H  ;ASCIZ串
  PH DW  ? ;文件代号
   …
   LEA DX,PN
   MOV PH,AX  ;存储文件代号

(4)文件代号和错误返回代码
对于存取磁盘文件,首先用一个ASCIZ串指定文件并调用DOS功能3CH建立或打开文件。如果成功,操作置CF为0,并把文件代号传送到AX中,这时文件和代号建立了对应关系,所以要注意保存这个代号。如果操作不成功,CF被置1,AX中包含的是错误代码,这个错误代码都取自一个统一的错误信息表。

(5)文件属性

文件属性字节:CX(存放属性字节):xxxxxxxx00xxxxxx
前10位没用到,属性字节只用后六位。
01-只读文件,该文件不能为写而打开。
02-隐文件,用DIR查不到该文件。
03-系统文件,用DIR查不到该文件。
08-软盘的卷标号。
10-子目录。
20-已写入并关闭了文件(硬盘用)。

使用改变文件属性功能(43H)可以改变现有文件的属性。
MOV  AH,43H 
MOV  AL,01 
MOV  CX,01 
MOV  DX,SEG FNAME 
MOV  DS,DX 
MOV  DX,OFFSET FNAME 
INT   21H ;CALL DOS
检验文件属性,AL置为00,操作后当前的属性值返回到CX寄存器。
改变文件属性,置AL为01,CX放入新的属性,操作把这个新属性置入目录项。

(6)写磁盘文件

1.用ASCIZ串从系统中得到文件代号
2.用INT 21H的3CH功能号建立文件
3.用INT 21H的40H功能号写入文件
4.用INT 21H的3EH关闭文件

(7)读磁盘文件

1.用ASCIZ串从系统中得到文件代号
2.用INT 21H的3DH功能号打开文件
3.用INT 21H的3FH功能号读入文件
4.用INT 21H的3EH关闭文件

(8)移动读写指针
DOS提供了移动读写指针功能42H,该功能要求在BX中指定文件代号,由AL中的代码确定改变指针的三种方式。在每种方式中,由CX和DX指定一个双字长的偏移值,低位字在DX中,高位字在CX中,这个偏移值是一个带符号的整数,它可以是正数,也可以是负数。

①AL=00 绝对移动方式 偏移从文件首开始计算。
例:从文件首开始,移动指针1024字节。
  MOV AH,42H
  MOV AL,00
  MOV BX,HANDLE1
  MOV CX,00
  MOV DX,1024
  INT 21H
  JC ERROR

②AL=01 相对移动方式 当前的指针值加上偏移值作为新的指针值。
例:MOV BX,HANDLE
MOV CX,0
MOV DX,N
CMP DX,0
JGE POINT
NOT CX
POINT:MOV AL,1
MOV AH,42H
INT 21H
JC ERROR

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/67961.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android布局【RelativeLayout】

文章目录 介绍常见属性根据父容器定位根据兄弟组件定位 通用属性margin 设置组件与父容器的边距padding 设置组件内部元素的边距 项目结构主要代码 介绍 RelativeLayout是一个相对布局,如果不指定对齐位置,都是默认相对于父容器的左上角的开始布局 常见…

从零实现kv存储V1.0:array初版

本节开始,逐步实现基于内存的kv存储引擎。 一、项目主要功能和知识点 参照redis,主要实现的功能: 1、数据的插入、查询、删除等操作 1)SET:插入key - value 2)GET:获取key对应的value 3&#…

敏捷项目管理如何做好Sprint Backlog?迭代管理

什么是Sprint Backlog? Sprint Backlog是Scrum的主要工件之一。在Scrum中,团队按照迭代的方式工作,每个迭代称为一个Sprint。在Sprint开始之前,PO会准备好产品Backlog,准备好的产品Backlog应该是经过梳理、估算和优先…

2023年国赛数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法,其…

Linux系统USB摄像头测试程序(二)_读取配置

1、收先安装gtk3,我的测试机器是ubutn16.04,只要执行下面的安装命令就可以了 apt-get install libgtk-3-dev 使用下列命令验证是否安装好gtk3: pkg-config --cflags --libs gtk-3.0 2、显示结果类似如下: -pthre…

C# Equals()方法报错:NullReferenceException was unhandled

下面是一个C# Equals()方法的例子,执行时报错了 static void Main(string[] args) {string name "sandeep";string myName null;Console.WriteLine(" operator result is {0}", name myName);Console.WriteLine("Equals method result…

无人直播系统究竟是怎么做的?效果如何?

继数字人直播火热之后,或者说数字人直播的热潮还未下来,无人直播又再次刷新了我们的认知,让我们的眼光不得不从数字人身上转移到无人直播上来,因为,跟数字人直播相比,无人直播的成本更低,它更加…

Ubuntu22.04复现SHADEWACHER(手动安你就慢了)

因为我是打算跑TC数据集,所以跳过audit安装。 我的Ubuntu使用的是清华源。 1. Parser Setup 1.1 g apt install g1.2 neo4j Ubuntu22.04换什么源都会导致无法定位软件包,添加neo4j的官方源又会导致不信任的源。 22.04以下的版本,直接用命…

IntellIJ Idea 连接数据库-MySql

前言:可以用mariaDB工具,在本地创建服务器主机和数据库,而后用intellIJ Idea尝试连接 MariaDB创建数据库练习 1.IntellIJ Idea打开界面右侧Database工具,选择MySQL数据库。 2.填写数据库账号密码,地址端口号&#xff…

【实操】2023年npm组件库的创建发布流程

2022年的实践为基础,2023年我再建一个组件库【ZUI】。步骤回顾: 2022年的npm组件包的发布删除教程_npm i ant-design/pro-components 怎么删除_啥咕啦呛的博客-CSDN博客 1.在gitee上创建一个项目,相信你是会的 2.创建初始化项目,看吧&#…

CSS变形与动画(二):perspctive透视效果 与 preserve-3d 3d效果(奥运五环例子)

文章目录 perspective 3d透视效果preserve-3d 3d嵌套效果例子 奥运五环 backface-visibility 背面效果 perspective 3d透视效果 perspective 指定了观察者与 z0 平面的距离&#xff0c;使具有三维位置变换的元素产生透视效果。z>0 的三维元素比正常大&#xff0c;而 z<0 …

LeetCode150道面试经典题--验证回文串(简单)

1.题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否…