本实验题目:将一个文件myprog.txt里面的内容中的大写字母全部转化为小写,且不能使用临时文件。
题目实现思路:
1、采用读和写的方式打开myprog.txt文件
2、读取文件的数个内容放入缓冲区BUFF中
3、将BUFF缓冲区中的内容全部转化为小写
4、将指针移动到每一次读取文件的开始位置
5、将BUFF缓冲区中的内容覆盖原位置的内容
6、读取内容和覆盖内容以及大小写转化都可用循环实现
7、关闭文件并退出
源代码如下:
- DATA SEGMENT;定义数据段
- MESS DB 'File Handle Error!',07,13,10,'$'
- FN1 DB 'myprog.txt',00H;myprog.txt放在工作目录下
- FH1 DW ?
- BUFF DB 20 DUP(0)
- DATA ENDS
- SSEG SEGMENT STACK;定义栈段
- DB 256 DUP(?)
- TOP LABEL BYTE
- SSEG ENDS
- CODE SEGMENT;定义代码段
- ASSUME CS:CODE,DS:DATA,SS:SSEG
- MAIN PROC FAR
- START:MOV AX,SSEG;栈初始化
- MOV SS,AX
- LEA SP,TOP
- MOV AX,DATA;数据段初始化
- MOV DS,AX
- MOV AH,3DH;以读和写方式打开已存在的文件
- LEA DX,FN1
- MOV AL,2
- INT 21H
- JC Error
- MOV FH1,AX
- MOV BX,FH1
- LEA DX,BUFF
- L1:MOV AH,3FH;读取文件内容,每次读取10字节
- MOV CX,10
- INT 21H
- JC Error;文件处理错误提示
- CMP AX,0
- JE ENDFILE
- PUSH AX
- PUSH CX
- PUSH DX
- PUSH BX
- MOV CX,AX
- XOR SI,SI
- TRANL:MOV DL,00100000B;将大写字母转化为小写字母用OR DL 00100000B
- OR BUFF[SI],DL;将小写字母转化为大写字母用AND DL 11011111B
- INC SI
- LOOP TRANL
- POP BX;移动指针到每一次读取文件的地方进行转化后的覆盖
- MOV CX,0FFFFH;指针要向前移动,故CX:DX应为负值
- NEG AX
- MOV DX,AX
- MOV AL,1
- MOV AH,42H
- INT 21H
- JC Error
- POP DX
- POP CX
- POP AX
- MOV CX,AX;用转化后的内容覆盖原位置文件内容
- MOV AH,40H
- INT 21H
- JC Error
- JMP L1
- Error:LEA DX,MESS;文件处理错误提示
- MOV AH,9
- INT 21H
- MOV AX,4C00H
- INT 21H
- ENDFILE:MOV BX,FH1;结束操作
- MOV AH,3EH
- INT 21H
- MOV AX,4C00H
- INT 21H
- MAIN ENDP
- CODE ENDS
- END START