RosettaCodeData/Task/Binary-digits/X86-64-Assembly/binary-digits-1.x86-64
2024-10-16 18:07:41 -07:00

45 lines
1.5 KiB
Text

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