Как сделать так, чтобы оно выводило число?
Перевести число в строковую форму и эту строковую форму выводить. Системный вызов write выводит байты как есть.
"как"? -- например, в цикле беря остаток от деления на 10 (или какое ты хочешь основание системы счисления), прибавляя к остатку '0' (или 'a' - 10, если он 10 или больше) и записывая результат в буфер, начиная с конца. Типа того:
mov rbx, 10
mov rsi, str + 20
l1:
mov rdx, 0
idiv rbx
add dl, '0'
mov byte [rsi], dl
add rsi, -1
test rax, rax
jnz l1
; rsi + 1 указывает на начало строки
; длина строки -- str + 20 - rsi