Сборка, читающая пользовательский ввод в регистры, дает неожиданное значение - PullRequest
0 голосов
/ 26 сентября 2019

Итак, я учусь использовать ассемблер и написал простую функцию _getInput, как показано ниже:

 _getInput:
      movq    $0, %rax
      movq    $0, %rdi
      subq    $8, %rsp           
      leaq    -8(%rsp), %rsi
      movq    $8, %rdx
      addq    $8, %rsp
      syscall
      ret

Затем у меня есть функция _start, которая вызывает ее и сохраняет введенный ввод в% r8, напримеритак:

_start:
    call _getInput
    movq (%rsi), %r8

Я проследил это в GDB, чтобы увидеть значения регистров и задать несколько вопросов.Во-первых, после того, как я ввожу ввод и нажимаю ввод,% rsi имеет значение 140737488347624. Когда я затем запускаю следующую строку для копирования в% r8, значение% r8 равно 2609. Может кто-нибудь объяснить, что именно происходит и гдеэти значения берутся?Я ожидал, что значение будет 49 (представление ASCII 1), хотя, возможно, символ новой строки усложняет это?Спасибо!

...