format ELF64 executable 3 entry start segment executable readable start: pop rax ; pop argc off stack. It should be at least 1 .loop0: pop rdi ; pop the pointer to argument string off stack call prints ; call a function to print a string mov rdi, 0x0a ; parameter to next function. 0x0a = line feed = 10 call printc ; call a function to print a single character dec rax ; decrement RAX. jnz .loop0 ; get next argument if RAX is not yet 0 .exit: mov rax, 60 mov rdi, 0 syscall prints: ; function that prints a zero terminated string push rax push rdi push rsi push rdx xor rdx, rdx cmp byte [rdi + rdx], 0 je .return .stloop: cmp byte [rdi + rdx], 0 je .printit inc rdx jmp .stloop .printit: mov rax, 1 mov rsi, rdi mov rdi, 1 syscall .return: pop rdx pop rsi pop rdi pop rax ret printc: ;function that prints a single character in rdi (dil). push rax push rsi push rdx push rdi mov rax, 1 mov rdi, 1 mov rsi, rsp mov rdx, 1 syscall pop rdi pop rdx pop rsi pop rax ret