В общем, хочу считать число из терминала и просто его вывести обратно. Проблема заключается в том, что при вводе строки из 4 или меньше символов ничего не выводится, а если не менее 5 символов то выводятся символы, начиная с 5. Я не могу найти и понять ошибку.
section .data
num dd 0
section .bss
buf resb 10
section .text
global _start
_start:
; Считывание числа из терминала
mov rax, 0
mov rdi, 0
mov rsi, buf
mov rdx, 10
syscall
; Подготовка к перевода строки в число
xor rax, rax
xor rbx, rbx
mov rbx, 10
lea rsi, [buf]
mov rcx, 10
convert_to_uint32_t:
; 10 раз считываем значение элементов массива buf
; из аски кода вычитаем код нуля => получаем цифру
; текущее число умножаем на 10 и прибавляем цифру
cmp rcx, 0
je end_convert
xor rdx, rdx
movzx rdx, byte[rsi]
sub rdx, '0'
mul rbx
add rax, rdx
inc rsi
dec rcx
jmp convert_to_uint32_t
end_convert:
mov [num], rax
lea rsi, [buf+10]
mov rax, [num]
xor rbx, rbx
mov rbx, 10
; Обратное преобразованание числа в строку для вывода
convert_to_str:
xor rdx, rdx
div rbx
add rdx, '0'
mov [rsi], rdx
dec rsi
cmp rax, 0
jne convert_to_str
; Выводим строку числа
mov rax, 1
mov rdi, 1
mov rsi, buf
mov rdx, 10 ;
syscall
; Корректное завершение программы
mov rax, 60
xor rdi, rdi
syscall