Я пытаюсь написать простую тестовую программу в ассемблере, которая просто вызывает 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
.