Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;***************************************************************
- ; Programa atidaranti failą duom.txt, pakeičianti mažąsias raides didžiosiomis ir rezultatą įrašanti į failą rez.txt
- ;***************************************************************
- .model small
- skBufDydis EQU 100 ;konstanta skBufDydis (lygi 20) - skaitymo buferio dydis
- skBufDydis2 EQU 100
- raBufDydis EQU 101 ;konstanta raBufDydis (lygi 20) - rašymo buferio dydis
- raBufDydis2 EQU 101
- .stack 100h
- .data
- ;duom db "duom.txt",0 ;duomenų failo pavadinimas, pasibaigiantis nuliniu simboliu (C sintakse - '\0')
- ;duom2 db "duom2.txt",0
- ;rez db "rez.txt",0 ;rezultatų failo pavadinimas, pasibaigiantis nuliniu simboliu
- skBuf db skBufDydis dup (0) ;skaitymo buferis
- skBuf2 db skBufDydis2 dup (0)
- raBuf db raBufDydis dup (30h) ;rašymo buferis
- raBuf2 db raBufDydis2 dup (0)
- dFail dw ? ;vieta, skirta saugoti duomenų failo deskriptoriaus numerį ("handle")
- dFail2 dw ?
- rFail dw ? ;vieta, skirta saugoti rezultato failo deskriptoriaus numerį
- kiek dw ?
- kiek2 dw ?
- failas1 db 20 dup (0)
- failas2 db 20 dup (0)
- failas3 db 20 dup (0)
- pranesimas1 DB "Nera irasytu parametru", 13, 10, "$"
- pranesimas2 DB "Ivyko klaida atidarant duomenu faila", 13, 10, "$"
- pranesimas3 DB "Ivyko klaida atidarant rezultato faila", 13, 10, "$"
- pranesimas4 DB "Ivyko klaida uzdarant duomenu faila", 13, 10, "$"
- pranesimas5 DB "Ivyko klaida uzdarant rezultato faila", 13, 10, "$"
- pranesimas6 DB "Ivyko klaida skaitant duomenis", 13, 10, "$"
- pranesimas7 DB "Ivyko dalinis irasymas", 13, 10, "$"
- pranesimas8 DB "Ivyko klaida rasant", 13, 10, "$"
- .code
- pradzia:
- MOV ax, @data ;reikalinga kiekvienos programos pradzioj
- MOV ds, ax ;reikalinga kiekvienos programos pradzioj
- MOV BX, 81h ;i BX ikeliam 81h reiksme, nes programos parametrai saugomi adresu ES:0081h
- cmp byte ptr es:[80h],0
- je help
- dar:
- MOV AX, ES:[BX] ;nuskaitom pirmus du parametro baitus
- ;INC BX ;padidinam bx 1, kad per sekanti skaityma imtume 1 baitu toliau
- CMP AL, 13 ;palyginam ar pirmas nuskaitytas simbolis nera new line (ar kartais nepaspaude enter)
- je help
- cmp al,20h
- je tl
- tl:
- inc bx
- CMP AX, "/?"
- je help
- jne f1
- MOV AX, ES:[BX] ;nuskaitom per viena baita toliau, nes BX po praejusio nuskaitymo buvo padidintas 1
- CMP AH, 13
- je help
- inc bx
- jmp dar
- help:
- MOV DX, offset pranesimas1 ;atspausdinam tai kas saugoma adresu uztagintu "pranesimas3"
- MOV AH, 09h ;zr google > int 21h > pirmas link
- INT 21h
- JMP pabaiga
- f1:
- mov si, offset failas1
- inc bx
- f11:
- mov dl, byte ptr es:[bx]
- mov [si],dl
- inc si
- inc bx
- cmp byte ptr es:[bx],20h
- je f2
- jmp f11
- f2:
- mov si, offset failas2
- inc bx
- f22:
- mov dl,byte ptr es:[bx]
- mov [si],dl
- inc si
- inc bx
- cmp byte ptr es:[bx],20h
- je f3
- jmp f22
- f3:
- mov si, offset failas3
- inc bx
- f33:
- mov dl, byte ptr es:[bx]
- mov [si],dl
- inc si
- inc bx
- cmp byte ptr es:[bx],13
- je tol
- jmp f33
- tol:
- ;*****************************************************
- ;Duomenų failo atidarymas skaitymui
- ;*****************************************************
- MOV ah, 3Dh ;21h pertraukimo failo atidarymo funkcijos numeris
- MOV al, 00 ;00 - failas atidaromas skaitymui
- MOV dx, offset failas1 ;duom ;vieta, kur nurodomas failo pavadinimas, pasibaigiantis nuliniu simboliu
- INT 21h ;failas atidaromas skaitymui
- JC klaida1 ;AtidarantSkaitymui ;jei atidarant failą skaitymui įvyksta klaida, nustatomas carry flag
- MOV dFail, ax ;atmintyje išsisaugom duomenų failo deskriptoriaus numerį
- ;*****************************************************
- ;Rezultato failo sukūrimas ir atidarymas rašymui
- ;*****************************************************
- MOV ah, 3Ch ;21h pertraukimo failo sukūrimo funkcijos numeris
- MOV cx, 0 ;kuriamo failo atributai
- MOV dx, offset failas3;rez ;vieta, kur nurodomas failo pavadinimas, pasibaigiantis nuliniu simboliu
- INT 21h ;sukuriamas failas; jei failas jau egzistuoja, visa jo informacija ištrinama
- JC klaida2 ;AtidarantRasymui ;jei kuriant failą skaitymui įvyksta klaida, nustatomas carry flag
- MOV rFail, ax ;atmintyje išsisaugom rezultato failo deskriptoriaus numerį
- ;*****************************************************
- ;Duomenų nuskaitymas iš failo
- ;*****************************************************
- skaityk:
- MOV bx, dFail ;į bx įrašom duomenų failo deskriptoriaus numerį
- CALL SkaitykBuf ;iškviečiame skaitymo iš failo procedūrą
- mov kiek,ax
- CMP ax, 0 ;ax įrašoma, kiek baitų buvo nuskaityta, jeigu 0 - pasiekta failo pabaiga
- JE uzdaryti
- ;Duomenų failo atidarymas skaitymui
- ;*****************************************************
- MOV ah, 3Dh ;21h pertraukimo failo atidarymo funkcijos numeris
- MOV al, 00 ;00 - failas atidaromas skaitymui
- MOV dx, offset failas2;duom2 ;vieta, kur nurodomas failo pavadinimas, pasibaigiantis nuliniu simboliu
- INT 21h ;failas atidaromas skaitymui
- JC klaida1 ;AtidarantSkaitymui ;jei atidarant failą skaitymui įvyksta klaida, nustatomas carry flag
- MOV dFail2, ax ;atmintyje išsisaugom duomenų failo deskriptoriaus numerį
- ;Duomenų nuskaitymas iš failo
- ;*****************************************************
- skaityk2:
- MOV bx, dFail2 ;į bx įrašom duomenų failo deskriptoriaus numerį
- CALL SkaitykBuf2 ;iškviečiame skaitymo iš failo procedūrą
- mov kiek2,ax
- CMP ax, 0 ;ax įrašoma, kiek baitų buvo nuskaityta, jeigu 0 - pasiekta failo pabaiga
- JE uzdaryti2
- jmp toliau
- klaida1:
- jmp klaidaAtidarantSkaitymui
- klaida2:
- jmp klaidaAtidarantRasymui
- ;klaida3:
- ;jmp klaidaAtidarantSkaitymui
- toliau:
- jmp toliau2
- uzdaryti:
- jmp uzdarytiSkaitymui
- uzdaryti2:
- jmp uzdarytiSkaitymui2
- toliau2:
- ;*****************************************************
- ;Darbas su nuskaityta informacija
- ;*****************************************************
- mov si,offset skBuf
- mov di,offset skBuf2
- mov bx,offset raBuf
- add si, kiek
- dec si
- mov cx,kiek
- add bx, 100
- dirbk:
- mov dl,[si]
- mov [bx], dl
- dec si
- dec bx
- loop dirbk
- add di ,kiek2
- dec di
- mov cx,kiek2
- add bx,kiek
- mov dh,0
- dirbk2:
- mov dl, [di]
- sub dl,30h
- add [bx],dl
- dec di
- dec bx
- loop dirbk2
- add bx,kiek2
- mov cx,101
- ar:
- mov dh,0
- mov dl,[bx]
- cmp dl,39h
- ja didinti
- jbe nieko
- didinti:
- sub dl,10d
- mov [bx],dl
- dec bx
- mov dl,1
- add [bx],dl
- jmp ar
- nieko:
- dec bx
- loop ar
- mov cx,raBufDydis
- inc cx
- mov si,offset raBuf2
- again:
- dec cx
- inc bx
- mov dl,[bx]
- cmp dl,30h
- jne baik
- jmp again
- baik:
- mov dl,[bx]
- mov [si],dl
- inc bx
- inc si
- inc kiek
- loop baik
- iseik:
- ;*****************************************************
- ;Rezultato įrašymas į failą
- ;*****************************************************
- MOV cx, kiek ;cx - kiek baitų reikia įrašyti
- MOV bx, rFail ;į bx įrašom rezultato failo deskriptoriaus numerį
- CALL RasykBuf ;iškviečiame rašymo į failą procedūrą
- ;CMP cx, skBufDydis ;jeigu vyko darbas su pilnu buferiu -> iš duomenų failo buvo nuskaitytas pilnas buferis ->
- ;JE skaityk ;-> reikia skaityti toliau
- ;*****************************************************
- ;Rezultato failo uždarymas
- ;*****************************************************
- uzdarytiRasymui:
- MOV ah, 3Eh ;21h pertraukimo failo uždarymo funkcijos numeris
- MOV bx, rFail ;į bx įrašom rezultato failo deskriptoriaus numerį
- INT 21h ;failo uždarymas
- JC klaidaUzdarantRasymui ;jei uždarant failą įvyksta klaida, nustatomas carry flag
- ;*****************************************************
- ;Duomenų failo uždarymas
- ;*****************************************************
- uzdarytiSkaitymui:
- MOV ah, 3Eh ;21h pertraukimo failo uždarymo funkcijos numeris
- MOV bx, dFail ;į bx įrašom duomenų failo deskriptoriaus numerį
- INT 21h ;failo uždarymas
- JC klaidaUzdarantSkaitymui ;jei uždarant failą įvyksta klaida, nustatomas carry flag
- uzdarytiSkaitymui2:
- MOV ah, 3Eh ;21h pertraukimo failo uždarymo funkcijos numeris
- MOV bx, dFail2 ;į bx įrašom duomenų failo deskriptoriaus numerį
- INT 21h ;failo uždarymas
- JC klaidaUzdarantSkaitymui
- pabaiga:
- MOV ah, 4Ch ;reikalinga kiekvienos programos pabaigoj
- MOV al, 0 ;reikalinga kiekvienos programos pabaigoj
- INT 21h ;reikalinga kiekvienos programos pabaigoj
- ;*****************************************************
- ;Klaidų apdorojimas
- ;*****************************************************
- klaidaAtidarantSkaitymui:
- MOV DX, offset pranesimas2 ;atspausdinam tai kas saugoma adresu uztagintu "pranesimas3"
- MOV AH, 09h ;zr google > int 21h > pirmas link
- INT 21h ;<klaidos pranešimo išvedimo kodas>
- JMP pabaiga
- klaidaAtidarantRasymui:
- MOV DX, offset pranesimas3 ;atspausdinam tai kas saugoma adresu uztagintu "pranesimas3"
- MOV AH, 09h ;zr google > int 21h > pirmas link
- INT 21h ;<klaidos pranešimo išvedimo kodas>
- JMP pabaiga
- klaidaUzdarantRasymui:
- MOV DX, offset pranesimas4 ;atspausdinam tai kas saugoma adresu uztagintu "pranesimas3"
- MOV AH, 09h ;zr google > int 21h > pirmas link
- INT 21h ;<klaidos pranešimo išvedimo kodas>
- JMP pabaiga
- klaidaUzdarantSkaitymui:
- MOV DX, offset pranesimas5 ;atspausdinam tai kas saugoma adresu uztagintu "pranesimas3"
- MOV AH, 09h ;zr google > int 21h > pirmas link
- INT 21h ;<klaidos pranešimo išvedimo kodas>
- JMP pabaiga
- ;*****************************************************
- ;Procedūra nuskaitanti informaciją iš failo
- ;*****************************************************
- PROC SkaitykBuf
- ;į BX paduodamas failo deskriptoriaus numeris
- ;į AX bus grąžinta, kiek simbolių nuskaityta
- PUSH cx
- PUSH dx
- MOV ah, 3Fh ;21h pertraukimo duomenų nuskaitymo funkcijos numeris
- MOV cx, skBufDydis ;cx - kiek baitų reikia nuskaityti iš failo
- MOV dx, offset skBuf ;vieta, į kurią įrašoma nuskaityta informacija
- INT 21h ;skaitymas iš failo
- JC klaidaSkaitant ;jei skaitant iš failo įvyksta klaida, nustatomas carry flag
- SkaitykBufPabaiga:
- POP dx
- POP cx
- RET
- klaidaSkaitant:
- MOV DX, offset pranesimas6 ;atspausdinam tai kas saugoma adresu uztagintu "pranesimas3"
- MOV AH, 09h ;zr google > int 21h > pirmas link
- INT 21h ;<klaidos pranešimo išvedimo kodas>
- MOV ax, 0 ;Pažymime registre ax, kad nebuvo nuskaityta nė vieno simbolio
- JMP SkaitykBufPabaiga
- SkaitykBuf ENDP
- PROC SkaitykBuf2
- ;į BX paduodamas failo deskriptoriaus numeris
- ;į AX bus grąžinta, kiek simbolių nuskaityta
- PUSH cx
- PUSH dx
- MOV ah, 3Fh ;21h pertraukimo duomenų nuskaitymo funkcijos numeris
- MOV cx, skBufDydis2 ;cx - kiek baitų reikia nuskaityti iš failo
- MOV dx, offset skBuf2 ;vieta, į kurią įrašoma nuskaityta informacija
- INT 21h ;skaitymas iš failo
- JC klaidaSkaitant2 ;jei skaitant iš failo įvyksta klaida, nustatomas carry flag
- SkaitykBufPabaiga2:
- POP dx
- POP cx
- RET
- klaidaSkaitant2:
- MOV DX, offset pranesimas6 ;atspausdinam tai kas saugoma adresu uztagintu "pranesimas3"
- MOV AH, 09h ;zr google > int 21h > pirmas link
- INT 21h ;<klaidos pranešimo išvedimo kodas>
- MOV ax, 0 ;Pažymime registre ax, kad nebuvo nuskaityta nė vieno simbolio
- JMP SkaitykBufPabaiga2
- SkaitykBuf2 ENDP
- ;*****************************************************
- ;Procedūra, įrašanti buferį į failą
- ;*****************************************************
- PROC RasykBuf
- ;į BX paduodamas failo deskriptoriaus numeris
- ;į CX - kiek baitų įrašyti
- ;į AX bus grąžinta, kiek baitų buvo įrašyta
- PUSH dx
- MOV ah, 40h ;21h pertraukimo duomenų įrašymo funkcijos numeris
- MOV dx, offset raBuf2 ;vieta, iš kurios rašom į failą
- INT 21h ;rašymas į failą
- JC klaidaRasant ;jei rašant į failą įvyksta klaida, nustatomas carry flag
- CMP cx, ax ;jei cx nelygus ax, vadinasi buvo įrašyta tik dalis informacijos
- JNE dalinisIrasymas
- RasykBufPabaiga:
- POP dx
- RET
- dalinisIrasymas:
- MOV DX, offset pranesimas7 ;atspausdinam tai kas saugoma adresu uztagintu "pranesimas3"
- MOV AH, 09h ;zr google > int 21h > pirmas link
- INT 21h ;<klaidos pranešimo išvedimo kodas>
- JMP RasykBufPabaiga
- klaidaRasant:
- MOV DX, offset pranesimas8 ;atspausdinam tai kas saugoma adresu uztagintu "pranesimas3"
- MOV AH, 09h ;zr google > int 21h > pirmas link
- INT 21h ;<klaidos pranešimo išvedimo kodas>
- MOV ax, 0 ;Pažymime registre ax, kad nebuvo įrašytas nė vienas simbolis
- JMP RasykBufPabaiga
- RasykBuf ENDP
- END pradzia
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement