I have the following code to read txt file:
; um programa que demonstra a criação de um arquivo e a
; leitura do mesmo
.model small
.stack
.code
start:
mov ax,@data ; endereço de base do segmento de dados
mov ds,ax ; é colocado em ds
mov dx,OFFSET FileName ; coloca o endereço do nome do arquivo em dx
mov al,2 ; modo de acesso - leitura e escrita
mov ah,3Dh ; função 3Dh - abre um arquivo
int 21h ; chama serviço do DOS
mov Handle,ax ; guarda o manipulador do arquivo para mais tarde
jc ErrorOpening ; desvia se carry flag estiver ligada - erro!
mov dx,offset Buffer ; endereço do buffer em dx
mov bx,Handle ; manipulador em bx
mov cx,100 ; quantidade de bytes a serem lidos
mov ah,3Fh ; função 3Fh - leitura de arquivo
int 21h ; chama serviço do DOS
jc ErrorReading ; desvia se carry flag estiver ligada - erro!
mov bx,Handle ; coloca manipulador do arquivo em bx
mov ah,3Eh ; função 3Eh - fechar um arquivo
int 21h ; chama serviço do DOS
mov cx,100 ; comprimento da string
mov si,OFFSET Buffer ; DS:SI - endereço da string
xor bh,bh ; página de vídeo - 0
mov ah,0Eh ; função 0Eh - escrever caracter
NextChar:
lodsb ; AL = próximo caracter da string
int 10h ; chama serviço da BIOS
loop NextChar
mov ax,4C00h ; termina programa
int 21h
ErrorOpening:
mov dx,offset OpenError ; exibe um erro
mov ah,09h ; usando a função 09h
int 21h ; chama serviço do DOS
mov ax,4C01h ; termina programa com um errorlevel =1
int 21h
ErrorReading:
mov dx,offset ReadError ; exibe um erro
mov ah,09h ; usando a função 09h
int 21h ; chama serviço do DOS
mov ax,4C02h ; termina programa com um errorlevel =2
int 21h
.data
Handle DW ? ; para guardar o manipulador do arquivo
FileName DB "C:\test.txt",0 ; arquivo a ser aberto
OpenError DB "Ocorreu um erro(abrindo)!$"
ReadError DB "Ocorreu um erro(lendo)!$"
Buffer DB 100 dup (?) ; buffer para armazenar dados
END start
Would it be possible to read through the end of the file without having to report the number of bytes to be read?