140 lines
3.7 KiB
NASM
Executable File
140 lines
3.7 KiB
NASM
Executable File
MASM
|
||
MODEL small
|
||
STACK 256
|
||
.data
|
||
buffer dw 1
|
||
Handle dw 0
|
||
Handle2 dw 0
|
||
filename db 'file.txt', 0
|
||
filename2 db 'file2.txt', 0
|
||
.code
|
||
|
||
ASSUME ds:@data,es:@data
|
||
main:
|
||
mov ax,@data
|
||
mov ds,ax
|
||
mov es,0b:8000h
|
||
;------------------Открываем файл-------------
|
||
|
||
mov di,30h
|
||
xor cx,cx ;атрибуты файла - обычный файл
|
||
mov bx,2 ;режим доступа обычный - доступ для чтения-записи
|
||
mov dx,1 ;если файл существует, то открыть его. в обратной случае вернуть ошибку
|
||
mov dx,offset filename ;формируем указатель на имя файла
|
||
mov ah,3dh ;номер функции DOS
|
||
int 21h ;открываем файл
|
||
mov [Handle], ax ;сохраним дескриптор файла
|
||
mov bx,ax
|
||
jnc read ;если файл существовал, то переход
|
||
jc ex ;переход в случае ошибки
|
||
|
||
read: mov ah, 3Fh
|
||
mov cx,1
|
||
mov dx, buffer
|
||
int 21h
|
||
|
||
cmp ax, cx ; Проверка EOF
|
||
jne eof ; Если EOF, то выходим
|
||
|
||
push ax
|
||
push bx
|
||
mov bx,dx
|
||
mov al,[bx]
|
||
mov [di],ax
|
||
pop bx
|
||
pop ax
|
||
|
||
inc di
|
||
; cmp [buffer], 13 ; Пропускаем 13-ый символ
|
||
; je read
|
||
; cmp [buffer], 10 ; Проверка конца строки
|
||
; je exit
|
||
jmp read
|
||
eof: mov bx, Handle ; закрываем файл
|
||
mov ah, 3Eh
|
||
int 21h
|
||
|
||
cld
|
||
sub di,30h
|
||
mov ax,di
|
||
mov cl,al
|
||
mov ah,al
|
||
mov al,' '
|
||
mov di,30h
|
||
jmp first
|
||
ex: jmp exit
|
||
first:
|
||
mov al,'$'
|
||
cmp [di],al
|
||
mov al,' '
|
||
je write;exit
|
||
cmp [di],al
|
||
je found
|
||
inc di
|
||
loop first
|
||
|
||
faild: jmp write
|
||
|
||
found: mov bx,di
|
||
inc di
|
||
cmp [di],al
|
||
je found2
|
||
jmp first
|
||
found2:
|
||
lea si,[di+1]
|
||
mov ah, cl
|
||
rep movsb
|
||
dec ah
|
||
mov cl,ah
|
||
mov di,bx
|
||
jmp found
|
||
|
||
write: ; xor cx,cx ;атрибуты файла - обычный файл
|
||
; mov bx,1 ;режим доступа обычный - доступ для чтения-записи
|
||
; mov dx,1
|
||
; mov dx,offset filename2 ;формируем указатель на имя файла
|
||
|
||
; mov cx,5
|
||
; mov ah,5bh ;номер функции DOS
|
||
; int 21h ;создаём и открываем файл
|
||
|
||
; mov [Handle2], ax ;сохраним дескриптор файла
|
||
; mov bx,ax
|
||
|
||
|
||
|
||
xor cx,cx ;атрибуты файла - обычный файл
|
||
mov bx,0002h ;режим доступа обычный - доступ для чтения-записи
|
||
mov dx,1 ;если файл существует, то открыть его. в обратной случае вернуть ошибку
|
||
mov dx,offset filename2 ;формируем указатель на имя файла
|
||
mov al,0001h
|
||
mov ah,3dh ;номер функции DOS
|
||
int 21h ;открываем файл
|
||
mov [Handle2], ax ;сохраним дескриптор файла
|
||
mov bx,ax
|
||
|
||
|
||
|
||
mov di,30h
|
||
; mov bx,
|
||
xor ax,ax
|
||
mov ah, 40h
|
||
mov cx,30
|
||
mov dx, di
|
||
int 21h
|
||
|
||
mov ah,0dh
|
||
int 21h
|
||
|
||
cmp ax, cx ; Проверка EOF
|
||
|
||
mov bx, Handle2 ; закрываем файл
|
||
mov ah, 3Eh
|
||
int 21h
|
||
jc exit ;переход в случае ошибки
|
||
|
||
exit:
|
||
mov ax,4c00h
|
||
int 21h
|
||
end main
|