经典汇编语言教程:10.4 文件操作程序举例

10.4 文件操作程序举例

例10.12 编写一个程序显示由例10.11建立的记录文件students.dat中的学生信息。 

解:
.MODEL SMALL,C
studentSTRUCT
idDW ?
snameDB 10 DUP(?)
ageDB ?
studentENDS
.DATA

fname

DB "Students.dat",0

id1

DB "Id:", 4 dup(?), 0dh, 0ah, "$"

name1

DB "Name:", 10 dup(' '), 0dh, 0ah, "$"

age1

DB "Age:", 2 dup(?), 0dh, 0ah, "$"

msg1

DB "Fail to open file$"

peason

student <>
.CODE
DispMsgPROC USES AX DX, Msg:PTR BYTE;显示字符串Msg
……;参见例10.7
DispMsgENDP
;程序功能:把数据Data转换成长度为Len的字符串;
;入口参数:待转换数据Data,转换成字符串的长度为Len,存放字符串的首地址为PStr;
;出口参数:读入信息(字符串)存放缓冲区buff中。
GetStrPROC USES AX CX DX DI, Data:WORD, Len:WORD, PStr:PTR BYTE
MOVCX, Len
MOVDI, PStr
MOVAL, ' '
REPSTOSB;把存放字符串的缓冲区填充为空格
MOVDI, PStr
ADDDI, Len
DECDI;确定最后一个字符在缓冲区中的位置
MOVAX, Data
MOVCX, 10
.REPEAT
XORDX, DX
IDIVCX;除10,从低位向高位求得每一位
ADDDL, '0';把余数转变成字符,然后存放目标单元
MOV[DI], DL
DECDI
.UNTIL AX==0
RET
GetStrENDP
.STARTUP
MOVAX, DS
MOVES, AX
LEA DX, fname
MOVAL, 0H
MOVAH, 3DH
INT21H;以“只读”方式打开指定的文件
.IF CARRY?;若创建失败,则显示失败信息
INVOKE DispMsg, ADDR msg1
JMP over
.ENDIF
MOVBX, AX;把句柄存入BX,为后面使用作准备
again:
MOVCX, SIZE peason
LEADX, peason
MOVAH, 3FH
INT21H;从文件中读出一个记录
.IF CARRY? || AX==0;若读记录出错或遇到文件尾,结束

JMP

close
.ENDIF
INVOKEGetStr, peason.id, 4, ADDR Id1+3;把“学号”转换成字符串
INVOKEDispMsg, ADDR Id1;显示“学号”字符串
MOVCX, 10
LEASI, peason.sname
LEADI, Name1+5
REPMOVSB;把“姓名”转移到显示区
INVOKEDispMsg, ADDR Name1;显示“姓名”字符串
INVOKEGetstr, peason.age, 2, ADDR Age1+4;把“年龄”转换成字符串
INVOKEDispmsg, ADDR Age1;显示“年龄”字符串
JMPagain
close:
MOVAH, 3EH
INT21H;关闭当前打开的文件
over:
.EXIT0
END

例10.11和10.12,我们不难掌握记录文件的读写方法。有兴趣的读者,还可以利用文件指针的定位来指定读写某个具体的记录。

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号