- 首页 > it技术 > >
本实验题目(将一个文件myprog.txt里面的内容中的小写字母全部转化为大写,其他字符保持不变,且不能使用临时文件。(对前面一道题目的改进版本))
DATA SEGMENT;
定义数据段
MESS DB 'File Handle Error!',07,13,10,'$'
FN1DB 'myprog.txt',00H;
myprog.txt放在工作目录下
FH1DW ?
BUFF DB 20 DUP(0)
DATA ENDSSSEGSEGMENT STACK;
定义栈段
DB 256 DUP(?)
TOP LABEL BYTE
SSEGENDSCODESEGMENT;
定义代码段
ASSUME CS:CODE,DS:DATA,SS:SSEG
MAINPROC FAR
START:
MOV AX,SSEG;
栈初始化
MOV SS,AX
LEA SP,TOPMOV AX,DATA;
数据段初始化
MOV DS,AXMOV AH,3DH;
以读和写方式打开已存在的文件
LEA DX,FN1
MOV AL,2
INT 21H
JC Error
MOV FH1,AXMOV BX,FH1
LEA DX,BUFF
L1:MOV AH,3FH;
读取文件内容,每次读取10字节
MOV CX,10
INT 21H
JC Error;
文件处理错误提示
CMP AX,0
JE ENDFILEPUSH AX
PUSH CX
PUSH DX
PUSH BX
MOV CX,AX
XOR SI,SI
MOVDL,11011111B
TRANL:
MOV DH,BUFF[SI]
CMP DH,'a'
JBS1
CMP DH,'z'
JAS1;
将大写字母转化为小写字母用OR DL 00100000B
ANDBUFF[SI],DL;
将小写字母转化为大写字母用AND DL 11011111B
S1:INC SI
LOOP TRANLPOP BX;
移动指针到每一次读取文件的地方进行转化后的覆盖
MOV CX,0FFFFH;
指针要向前移动,故CX:DX应为负值
NEG AX
MOV DX,AX
MOV AL,1
MOV AH,42H
INT 21H
JC ErrorPOP DX
POP CX
POP AXMOV CX,AX;
用转化后的内容覆盖原位置文件内容
MOV AH,40H
INT 21H
JC Error
JMP L1Error:LEA DX,MESS;
文件处理错误提示
MOV AH,9
INT 21H
MOV AX,4C00H
INT 21HENDFILE:
MOV BX,FH1;
结束操作
MOV AH,3EH
INT 21H
MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END START
推荐阅读