format ELF64 executable 9 segment readable nums: dd 5, 50, 9000, 0 ;numbers to convert, 0 as end of data indicator segment readable writable result: times 16 db 0 ;empty string for printing the result later db 10, 0 segment readable executable entry start start: xor rbx, rbx ;index for nums mov eax, [nums + 4 * rbx] mov rcx, 16 ;index for result string convert: dec rcx mov rdi, 1 ;get least significant bit and rdi, rax add rdi, '0' ;convert to char mov [result + rcx], dil ;and put it in result[ecx] shr rax, 1 ;right shift, 1 bit test rax, rax ;eax still > 0 jnz convert ;if yes, repeat mov rax, 4 ;print result mov rdi, 1 mov rsi, result mov rdx, 18 syscall xor rax, rax ;reset string to 0s (not strictly needed, mov [result], rax ;because we have increasing numbers, and mov [result + 8], rax ;old chars will be overwritten) inc rbx ;and repeat if list isn't done mov eax, [nums + 4 * rbx] mov rcx, 16 test rax, rax jnz convert mov rax, 1 ;exit xor rdi, rdi syscall