; 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