; Să se citească de la
tastatură numele unui fişier. Să se afişeze acest fişier
pe ecran
assume cs:code, ds:data
data segment
msg db 'Numele
fisierului: $'
maxFileName db 12
lFileName db ?
fileName db 12 dup
(?)
buffer db 100 dup
(?), '$'
openErrorMsg db 'Fisierul
nu exista.$'
readErrorMsg db 'Nu se
poate citii din fisier.$'
data ends
code segment
start:
mov ax, data
mov ds, ax
; afişăm mesajul cu funcţia 09h, int 21h
mov ah, 09h
mov dx, offset msg
int 21h
; citim de la tastatură numele fişierului cu ajutorul funcţiei
0ah, int 21h
mov ah, 0ah
mov dx, offset maxFileName
int 21h
; în urma citirii la adresa maxFileName + 2 = fileName se memorează
numele fişierului citit
; la adresa maxFileName + 1 = lFileName se memorează dimensiunea şirului
de caractere care reprezintă numele fişierului
; transformăm numele fişierului într-un şir ASCIIZ
mov al, lFileName
xor ah, ah
mov si, ax
mov fileName[si], 0
; deschidem fişierul cu funcţia 3dh, int 21h
mov ah, 3dh
mov al, 0 ; deschidem fişierul pentru citire
mov dx, offset fileName
int 21h
jc openError ; eroare la
deschiderea fişierului dacă CF e setat
mov bx, ax ; salvăm identificatorul fişierului în registrul bx
; cât timp nu e sfârşit de fişier citim din fişier şi
afişăm pe ecran
goOn:
mov ah, 3fh
mov dx, offset buffer
mov cx, 100 ; citim maxim 100 de caractere
int 21h
jc readError
; în caz de succes funcţia 3dh întoarce în ax numărul
de octeţi citiţi
; salvăm numărul octeţilor citiţi şi
pregătim şirul pentru afişare
mov si, ax
mov buffer[si], '$'
; afişăm ce am citit
mov ah, 09h
int 21h
cmp si, 100
je goOn ; dacă am citit 100
de octeţi înseamnă că nu am terminat de citit
jmp endPrg ; sărim peste
tratarea eventualelor erori
openError:
mov ah, 09h
mov dx, offset openErrorMsg
int 21h
jmp endPrg
readError:
mov ah, 09h
mov dx, offset readErrorMsg
int 21h
endPrg:
mov ax,4c00h
int 21h
code ends
end start