|
|
|
ввод с клавиатуры assembler
|
|||
|---|---|---|---|
|
#18+
Есть программа, которая из заданной строки удаляет заданный символ. Как сделать так, чтобы эта строка и символ вводились из клавиатуры? Заранее спасибо .. data segment string db 'CHTO TEBE NADO',0ah,'$' ; строка для обработки l dw $ - string data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax lea dx,string ;вывод на экран строки до обработки mov ah,9 int 21h mov dx,30h lea di,string mov cx,l n: cmp byte ptr [di],'T' ;собственно здесь указан искомый символ. jne nn ;если найден искомый символ то перезапишем строку, без этого символа. mov si,di inc si push di push cx inc cx m: mov al,byte ptr [si] mov byte ptr [di],al inc si inc di loop m pop cx pop di nn: inc di loop n lea dx,string ;вывод после обработки mov ah,9 int 21h mov ah,4ch int 21h code ends end start ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 21:48 |
|
||
|
ввод с клавиатуры assembler
|
|||
|---|---|---|---|
|
#18+
Открой описание int 21h и найди там функцию ввода с клавиатуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2013, 00:21 |
|
||
|
ввод с клавиатуры assembler
|
|||
|---|---|---|---|
|
#18+
Сегодня как-раз думал на тему похожего вопроса, набрёл на тему, и решил, что видимо судьба. Итак, новую тему создавать не буду... Суть: как отловить нажатие клавиши в ассемблере в линуксе (точнее в консольном приложении линукса). Пробовал sys_calls (int 0x80 функция sys_read), но это не то, так как данная команда ждёт именно подтверждение ввода (энтер), а надо отловить любое нажатие. Пробовал в порт клавиатуры простучаться, а он ошибкой ругается, видимо как и в винде такие обращения запрещены. Есть ли что-то несложно, без премудростей. P.S. Сразу скажу, что не решаю реальную практическую задачу... Просто хочется знать :). Видел какие-то "простыни" кода, но думаю должен быть намного легче способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2013, 23:15 |
|
||
|
ввод с клавиатуры assembler
|
|||
|---|---|---|---|
|
#18+
ПрограмёрP.S. Сразу скажу, что не решаю реальную практическую задачу... Просто хочется знать :). Видел какие-то "простыни" кода, но думаю должен быть намного легче способ.Открываешь файл /dev/con на чтение и наслаждаешься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2013, 23:20 |
|
||
|
ввод с клавиатуры assembler
|
|||
|---|---|---|---|
|
#18+
White Owl, Где-то недопонял. подскажите? :) SECTION .data console: db '/dev/console' sym: db 0 sym_count: db 0 SECTION .text global _start _start: ;открываю на чтение /dev/console mov eax, 5 mov ebx, console mov ecx, 0 int 0x80 ;если ошибка - тогда перепрыгиваю "к выходу" cmp eax, -4096 je cikl_out cikl: ;читаю байт, там ведь больше быть не может? mov byte [sym], 0 mov ebx, eax mov eax, 3 mov ecx, sym mov edx, sym_count int 0x80 ;проверяю не равен ли нулю считанный символ ;если не равен - выхожу из цикла test byte [sym], 0xFF jnz cikl_out jmp cikl ; безусловный цикл (пока не будет нажата клавиша) cikl_out: ;закрываю файл mov eax, 6 int 0x80 ;выхожу с программы mov eax, 1 mov ebx, 0 int 0x80 Заранее благодарен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2013, 23:56 |
|
||
|
ввод с клавиатуры assembler
|
|||
|---|---|---|---|
|
#18+
если /dev/console заменить на /dev/tty или /dev/input - то нажатие клавиш воспринимается, но не так как хотелось, а так, как и при обычном sys_read со стандартного потока ввода (ведь по сути это оно и есть), то есть после энтера :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2013, 00:58 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38262900&tid=1341803]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
409ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 710ms |

| 0 / 0 |
