Тема: TASM Робота з файлами.
Тут недавно попросили для курсача написати програмку, то трохи посидів покодив під TASM
Може комусь пригодиться, коменти писав, так що не мало би бути проблем з розумінням як працює.
▼Завдання
Читає 20 символів з клавіатури, пише їх в файл. Читає з цього файла, якщо зустрічає ^,<,> пише наступні символи у файли m1,m2,m3 відповідно
▼Розв’язок
.model small
.stack 256
.data
S0 DB 'Please enter your 20 chars', 13, 10, '$'
S1 DB 'I could not open $'
S2 DB ' for writing.',13,10,'$'
S3 DB 'I could not open $'
S4 DB ' for reading.',13,10, '$'
S5 DB '$'
C2 DB '^'
C3 DB '<'
C4 DB '>'
FN1 DB 'm1.txt',0
FN2 DB 'm2.txt',0
FN3 DB 'm3.txt',0
FN4 DB 'm4.txt',0
US1 DB 20 dup (20h)
F1 DW 0
F2 DW 0
F3 DW 0
F4 DW 0
.code
;*******************************************
main:
MOV ax, @data
MOV ds, ax
; print welcome message:
LEA DX, S0
MOV AH, 09h
INT 21h
;============================
; Eternal loop to get
; and print keys:
MOV CX, 20
MOV SI, 0
wait_for_key:
; get keystroke from keyboard:
; (remove from the buffer)
MOV AH, 0
INT 16h
;puts the characters in the array
MOV [US1+SI], AL
INC SI
; print the key:
MOV AH, 0Eh
INT 10h
;check how many entered
LOOP wait_for_key
;create files
MOV AH, 3CH
MOV CL, 0
LEA DX, FN1
INT 21h
MOV F1, AX
MOV AH, 3CH
MOV CL, 0
LEA DX, FN2
INT 21h
MOV F2, AX
MOV AH, 3CH
MOV CL, 0
LEA DX, FN3
INT 21h
MOV F3, AX
MOV AH, 3CH
MOV CL, 0
LEA DX, FN4
INT 21h
MOV F4, AX
;save string into file
MOV AH, 40h
MOV BX, F1
MOV CX, 20
LEA DX, US1
INT 21h
;close file
MOV AH,3Eh
INT 21h
;open file for reading
MOV AH, 3CH
MOV CL, 1
LEA DX, FN1
INT 21h
MOV F1, AX
;read from file
MOV AH,3fh
MOV BX,F1
MOV CX,20
LEA DX, US1
INT 21h
;close file
MOV AH,3Eh
INT 21h
;analize string
MOV SI, 0
MOV BX, 0
next_char:
MOV AL, [US1+SI]
;look for comand chars
CMP AL, [C2+0]
JE set_F2
CMP AL, [C3+0]
JE set_F3
CMP AL, [C4+0]
JE set_F4
CMP BX, 0
JE loop_check
;save this char
MOV S5, AL
JMP save_in_file
set_F2:
MOV BX, F2
JMP loop_check
set_F3:
MOV BX, F3
JMP loop_check
set_F4:
MOV BX, F4
JMP loop_check
save_in_file:
MOV AH, 40h
MOV CX, 1
LEA DX, S5
INT 21h
loop_check:
INC SI
CMP SI,20
JL next_char
;close all files
MOV BX, F2
MOV AH,3Eh
INT 21h
MOV BX, F3
MOV AH,3Eh
INT 21h
MOV BX, F4
MOV AH,3Eh
INT 21h
; return to operating system:
exit:
MOV AH, 4Ch
INT 21h
end main