4. Выводы
В ходе работы получены навыки организации подпрограмм и навыки работы с фай-
лами через описатели.
5. Зачетное задание
На входе текстовый файл. В этом файле удалите из всех групп пробелов все пробелы
кроме последнего и сохраните в файле под другим именем.
CODE SEGMENT
ASSUME CS:CODE, DS:CODE, SS:CODE
ORG 100h
START:
LEA DX, STR1
CALL PRINT
LEA DX, FILENAME1
CALL INPUT
CALL NEXTLINE
LEA DX, STR2
CALL PRINT
LEA DX, FILENAME2
CALL INPUT
CALL NEXTLINE
XOR BH, BH
MOV BL, [FILENAME1+1] ; len(FILENAME)
MOV [FILENAME1+2+BX], BYTE PTR 0 ; because the filename should fit the format 'filepath,0'
XOR BH, BH
MOV BL, [FILENAME2+1]
MOV [FILENAME2+2+BX], BYTE PTR 0
READING:
LEA DX, [FILENAME1+2]
CALL OPENFILE ; oppening the file with filename = FILENAME1
MOV BX, AX
LEA DX, MES
CALL READ
MOV CX, AX ; CX holds len(MES)
CALL CLOSEFILE
LEA SI, MES
LEA DI, NOSPACE
MOV DX, 0 ; previous char
MOV AX, 0 ; chars count
EDIT:
CMP DL, [SI]
JE CHECK
CONTINUE:
;MOV DI, [SI]
MOV BX, [SI]
MOV [DI], BX
MOV DL, [SI]
INC DI
INC SI
INC AX
LOOP EDIT
PUSHING:
PUSH AX
LEA DX, [FILENAME2+2]
CALL OPENFILE
MOV BX, AX
POP CX
LEA DX, NOSPACE
CALL WRITE
CALL CLOSEFILE
EXIT:
MOV AH, 4CH
INT 21H
CHECK:
CMP DX, ' '
JNE CONTINUE
INC SI
DEC CX
CALL EDIT
OPENFILE: ; Opennig file with filename = FILENAME and access = write and read MOV AH, 3DH
MOV AL, 2
INT 21H
RET
WRITE: ; Write into the file
MOV AH, 40H
INT 21H
RET
READ:
MOV AH, 3FH
LEA DX, MES
MOV CX, −1
INT 21H
RET
CLOSEFILE: ; Close file
MOV AH, 3EH
INT 21H
RET
INPUT: ; input string
MOV AH, 0AH
INT 21h
RET
PRINT: ; output notification MOV AH, 09H
INT 21H
RET
NEXTLINE: ; Warp to the next line MOV AH, 02H
MOV DL, 10
INT 21h
RET
FILENAME1 DB 128, 0, 128 DUP(0) FILENAME2 DB 128, 0, 128 DUP(0) MES DB 128, 0, 128 DUP('$')
NOSPACE DB 128, 0, 128 DUP('$')
STR1 DB 'Enter filename to read: $'
STR2 DB 'Enter filename to write: $:'
;NOFILE DB 'There is no file with that name. It was created.$'
;STR DB 'Enter the message to write: $' BYE DB 'Done.$'
CODE ENDS
END START
Пример работы программы:
Рис. 5.1