本實驗題目:將一個文件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