read
возвращает количество символов, поэтому вы можете индексировать в буфер и проверять, является ли последний прочитанный символ новой строки. Или просто безоговорочно перезаписать его с 0
следующим:
...
syscall ; rax = sys_read(0, buf, max_len)
mov byte [rsi + rax - 1], 0
Это не предполагает ошибки и что входная строка была передана с новой строкой вместо EOF.
(Linux syscall
s сохраняет все регистры, кроме RAX (возвращаемое значение) и RCX / R11, поэтому RSI по-прежнему удерживает name
.)