LINUX.ORG.RU

Как считать данные с клавиатуры в регистр или переменную


0

0

Всем привет! Недавно начал изучать FASM (под Linux), и столкнулся с проблемой. Подскажите, как записать считанную с клавиатуры строку/символ в регистр или переменную? В дебаггере не видно чтобы изменялся хоть один из регистров. Вот код

format ELF executable
start:
mov eax,4
mov ecx,msg
mov edx,msgsz
int 80h
mov eax,3
int 80h
cmp eax,32
jne start
mov eax,1
int 80h
msg db 'Press space to exit',0Ah
msgsz=$-msg
программа должна завершаться при нажатии на пробел, иначе повторять сообщение ПЫСЫ: Сори за тупой вопрос, но я реально не догоняю (ибо нуб пока)


0. int 80h - это устаревший метод. есть более быстрый метод через vdso.

1.
mov eax,4
mov ecx,msg
mov edx,msgsz
int 80h

тут явно не хватает fd - куда собственно выводить

2.
mov eax,3
int 80h

тут вообще параметры не указаны

3.
cmp eax,32

откуда взялось число 32?

4.
mov eax,1
int 80h

тут нехватает кода возврата, но это не смертельно.

generatorglukoff ★★
()
Ответ на: комментарий от PamidoR

http://asm.sourceforge.net/

смотри, у тебя сисколлы. они ничем не отличаются от сишных.
man 2 read
man 2 write

и read читает в буфер, а возвращает (в eax) кол-во прочитанных.

vdso(она же linux-gate.so.1) - это виртуальная библиотека, которая вставляется в адресное пространство каждого процесса, обеспечивает доступ к сисколлам в ядро

generatorglukoff ★★
()
Ответ на: комментарий от generatorglukoff

Странно, я ввожу 10 символов, а в eax заносится В (в шестнадцатеричной). А как вытащить данные из буфера? Нужно ведь чтобы программа определяла, что введённый символ соответствует условию и надо завершать работу. Если не трудно, подкинте, пожалуйста, рабочий примерчик.

PamidoR
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.