Как посимвольно считать весь файл?
Допустим, у меня есть текстовый файл, размер которого мне не известен. Мне нужно прочесть из него текст и вывести в терминал. Разбил программу на отдельные функции, которые вызываю с помощью 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" - первый символ, а мне нужно прочесть весь файл.
введите сюда описание изображения
