LinuxForum.Fans
Тема

NASM проблема ввода с консоли

Автор: nik2281 3 сообщений 1174 просмотров
#350616

Привет всем читающим. Проблема заключатся в том, что при ограничении ввода (посимвольном чтении) "лишняя" информация, не входящая в диапазон (прим:читаем 1 символ из введённых 4) воспринимается как новая команда...не знаю, как точнее сказать. Ниже опишу то, что имеется по результатам работы программы и исходник.

Исходник:

text
global _start
segment .data
    Digit db 0
    buf dw 0
            ; служебные
    Intro db 'Input smthg:', 0xa, '    '
    IntroLength equ $ - Intro
segment .text
_start:
    mov eax, 4
    mov ebx, 1
    mov ecx, Intro
    mov edx, IntroLength
    int 80h
    mov ecx, 0
    mov esi, buf
Reading:
    push ecx
    mov eax, 3
    mov ebx, 0
    mov ecx, Digit
    mov edx, 1
    int 80h 
exit:
    mov eax, 1
    int 80h

Консоль:

text

nik@Moon:~/1/progr/Assembler$ nasm -f elf lab44.asm
nik@Moon:~/1/progr/Assembler$ ./lab44.exe
Input smthg:
    123
nik@Moon:~/1/progr/Assembler$ 23
23: команда не найдена
nik@Moon:~/1/progr/Assembler$

По моим соображениям, "лишний" кусок остаётся в буфере ввода ОС, откуда потом автоматически вынимается. Если да, то как его почистить через NASM ? Или я не в ту сторону копаю? Отлаживал через gdb, там видно, что прочитан именно один символ, после чего также (!) автоматом происходит обработка "23\n" и уже после неё успешное завершение программы с кодом нуля...В общем, в каком направлении копать?

#350630
"nik2281" написал:
Если да, то как его почистить через NASM ?

надо точно так же read()'ом считывать всё надо до конца строки или eof'а...

#350639

хм. Попробуем.

Войдите или зарегистрируйтесь, чтобы ответить.