Files
templates/asm/p_2.asm
Mark Zheleznyakov be2b9502d1 init
2024-09-07 08:49:36 +03:00

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