LINUX.ORG.RU

Сообщения SK8T3R

 

простой код на NASM

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

 , ,

SK8T3R
()

RSS подписка на новые темы