NASM x86_64 Удалить символ новой строки и добавить 0 в конце строки - PullRequest
0 голосов
/ 02 ноября 2018

как бы вы удалили символ новой строки, который добавляется в конец строки, когда вы получаете его из консоли, используя системное чтение? Я хотел бы добавить 0 в конце, чтобы использовать эту строку для открытия файла

Я получаю ввод, как это:

mov     rdx,name_len    ; size_t count
mov     rsi,name        ; char *buf
mov     rdi,0           ; int fd, 0 for stdin
mov     rax,0           ; system read
syscall

1 Ответ

0 голосов
/ 02 ноября 2018

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.)

...