本实验题目(将一个文件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


    推荐阅读