45 lines
1.5 KiB
Text
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
|