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
MOV DL,11011111B
TRANL:
MOV DH,BUFF[SI]
CMP DH,'a'
JB S1
CMP DH,'z'
JA S1 ;将大写字母转化为小写字母用OR DL 00100000B
AND BUFF[SI],DL ;将小写字母转化为大写字母用AND DL 11011111B
S1: 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
本实验题目:将一个文件myprog.txt里面的内容中的小写字母全部转化为大写,其他字符保持不变,且不能使用临时文件。(对前面一道题目的改进版本)
最新推荐文章于 2022-09-15 09:55:08 发布