Вызов getchar из сборки - PullRequest
       21

Вызов getchar из сборки

0 голосов
/ 21 декабря 2018

Я пытаюсь написать простую тестовую программу в ассемблере, которая просто вызывает getchar и передает возвращаемое значение в putchar.Мой текущий код выглядит следующим образом:

.global main
.text

main:
mov $12,%rbx
.head:
call getchar
mov %rax,%rcx
call putchar
dec %rbx
test %rbx,%rbx
jne .head
call exit

Программа скомпилирована с использованием gcc -o prog prog.s в Windows 10 с Cygwin (с кодом выше сохраняется в prog.s).

Что яожидать, что это произойдет, это чтение из стандартного ввода 12 раз (произвольно) и немедленно отправить 12 символов чтения в стандартный вывод.Другими словами, при запуске программы из консоли я ожидал, что она будет ждать, пока что-то будет введено в консоль и нажата кнопка ввода.Вместо этого, что на самом деле происходит, когда я запускаю его, он сразу печатает 12, казалось бы, бессмысленных символов и выходит:

������������

В предыдущих программах, которые вызывали функцию C, которая использовала в них getchar, затем печаталичитать символ, а также результат для ferror(stdin).getchar очевидно вернул -1, и флаг ошибки stdin был установлен, как только был вызван getchar.Почему это может происходить?Особенно если учесть, что программа, написанная исключительно на C, может без проблем вызвать getchar.

...