140 lines
3.0 KiB
NASM
Executable File
140 lines
3.0 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
|