Untitled

 avatar
unknown
plain_text
2 years ago
2.4 kB
12
Indexable
v.386
.model small, c
;----------------------------------------------------------------
; Stek segment
stack_seg SEGMENT stack
 DB 100 DUP(?)
stack_seg ENDS
;----------------------------------------------------------------
; Podatocen segment
data_seg SEGMENT USE16 'DATA'

 folder db "papka", 0h
 filename db "text.txt", 0h
 buffer db 512 dup('$')
 buffer_end db '$'

data_seg ENDS
;----------------------------------------------------------------
; Koden segment
code_seg SEGMENT USE16 'CODE'
ASSUME cs:code_seg, ds:data_seg

start:
 ; Postavuvanje na adresata na DATA segmentot vo DS
 mov ax, data_seg
 mov ds, ax
;----------------------------------------------------------------
; Glavna procedura
main PROC
 mov ax, data_seg
 mov ds, ax

 ; Kreiraj direktorium i postavi se na nego
 mov ah, 039h
 lea dx, folder
 int 21h
 mov ah, 03bh
 lea dx, folder
 int 21h

 ; Kreiraj datoteka, i otvori ja za pisuvanje
 mov ah, 03ch
 mov cx, 0 ; Atributi
 lea dx, filename
 int 21h
 mov ah, 03dh
 mov al, 01h ; Mod za pristap
 lea dx, filename
 int 21h
 mov bx, ax ; File-handle

 ; Pocetna pozicija za smestuvanje na vneseniot tekst vo baferot
 lea di, buffer

 ; Loop za vnesuvanje na tekstot
 input_loop:
 ; Procitaj karakter od tastatura
 mov ah, 01h
 int 21h

 ; Ako Esc e pritisnat, zavrsi so vnesuvanje na tekst
 cmp al, 1Bh
 je end_input_loop

 ; Ako Enter e pritisnat, isprintaj go noviot red i dodadi go vo baferot
 cmp al, 0Dh
 je newline_pressed
 ; Ako ne, isprintaj go karakterot i dodadi go vo baferot
 mov ah, 02h
 mov dl, al
 int 21h
 stosb ; Stavi go karakterot vo baferot
 jmp input_loop

 newline_pressed:
 ; Isprintaj nov red na ekranot i dodadi go na baferot
 mov ah, 02h
 mov dl, 0Ah
 int 21h
mov dl, 0Dh
int 21h
 stosw ; Stavi gi karakterite za nov red vo baferot
 jmp input_loop

 end_input_loop:
 ; Stavi kraj na baferot
 lea si, buffer_end
 mov al, '$'
 stosb

 ; Zapisi go tekstot vo datotekata
 lea si, buffer
 mov cx, si
 sub cx, buffer_end
 neg cx ; cx ke bidi negativen bidejki smestuvame vo obraten redosled

 lea dx, filename
 mov ah, 40h
 int 21h

 ; Zatvori ja datotekata
 mov ah, 3Eh
 int 21h

main ENDP
;----------------------------------------------------------------
; Kraj na programata
; Interapt za prekin na izvrsuvanjeto, za da se vrati kontrolata na debagerot
mov
Editor is loading...