Как посимвольно считать весь файл?

Допустим, у меня есть текстовый файл, размер которого мне не известен. Мне нужно прочесть из него текст и вывести в терминал. Разбил программу на отдельные функции, которые вызываю с помощью call, а после метки _start попытался организовать цикл, но моя Выводит только первый символ из файла. Вот код:

section .data

file: db "./test.txt", 0

fileptr: db 1

O_RDONLY equ 0
O_WRONLY equ 1
O_RDWR equ 2

O_CREATE equ 100o
O_TRUNC equ 1000o
O_APPEND equ 2000o 

section .bss

descriptor resb 4
buffer resb 1
next resb 1


section .text
global _start

openFile:

mov eax, 5
mov ebx, file
mov ecx, O_RDWR
mov edx, 2
int 0x80

mov [descriptor],eax
ret

rnsym:

mov eax, 3
mov ebx, [descriptor]
mov ecx, buffer
mov edx, 1

int 80h ; Считали информацию из файла

ret

wrnsym:

mov eax, 4
mov ebx, 1
mov ecx, buffer
mov edx, 1

int 0x80 ; "Записали" на экран

ret

closefile:

mov eax,6

mov ebx,[descriptor]

int 0x80 ;закрытие файла
ret 

fin:
; выход из программы
mov eax, 1
mov ebx, 0
int 0x80


_start:

call openFile
nsym:
call rnsym
call wrnsym
cmp eax, 0
je closefile
call fin 
jne nsym

При этом, если все отдельные функции расположить после метки _start, убрав ret, программа выведет первый символ из файла, то есть функции рабочие.

  • Почему так происходит в случае с call?
  • Как правильно считать файл посимвольно (организовать цикл)? Я новичок в asm, поэтому буду благодарен за объяснение. О loop и loope знаю,но ecx занят адресом "Откуда читать/писать", поэтому мне не понятно, как организовать цикл.

Итак, есть заранее созданный файл с текстом "This is a text from file". Моя программа читает из него только "T" - первый символ, а мне нужно прочесть весь файл.

введите сюда описание изображения

введите сюда описание изображения


Ответы (0 шт):