1 %line 1+1 cl_arg.asm 2 3 4 5 [section .data] 6 7 LF equ 10 8 NULL equ 0 9 TRUE equ 1 10 FALSE equ 0 11 EXIT_SUCCESS equ 0 12 STDIN equ 0 13 STDOUT equ 1 14 STDERR equ 2 15 SYS_read equ 0 16 SYS_write equ 1 17 SYS_open equ 2 18 SYS_close equ 3 19 SYS_fork equ 57 20 SYS_exit equ 60 21 SYS_creat equ 85 22 SYS_time equ 201 23 24 25 00000000 0A00 new_line db LF, NULL 26 27 [section .text] 28 [global main] 29 main: 30 31 32 33 34 00000000 4989FC mov r12, rdi 35 00000003 4989F5 mov r13, rsi 36 37 38 39 40 41 print_arguments: 42 00000006 48C7C7[00000000] mov rdi, new_line 43 0000000D E830000000 call print_string 44 45 00000012 48C7C300000000 mov rbx, 0 46 47 print_loop: 48 00000019 498B7CDD00 mov rdi, qword[r13+rbx*8] 49 0000001E E81F000000 call print_string 50 51 00000023 48C7C7[00000000] mov rdi, new_line 52 0000002A E813000000 call print_string 53 54 0000002F 48FFC3 inc rbx 55 00000032 4C39E3 cmp rbx, r12 56 00000035 7CE0 jl print_loop 57 58 FINITO: 59 00000037 48C7C03C000000 mov rax, SYS_exit 60 0000003E 48C7C700000000 mov rdi, EXIT_SUCCESS 61 00000045 0F05 syscall 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 [global print_string] 77 print_string: 78 00000047 55 push rbp 79 00000048 4889E5 mov rbp, rsp 80 0000004B 53 push rbx 81 82 83 0000004C 4889FB mov rbx, rdi 84 0000004F 48C7C200000000 mov rdx, 0 85 str_count_loop: 86 00000056 803B00 cmp byte[rbx], NULL 87 00000059 7406 je str_count_done 88 0000005B 48FFC2 inc rdx 89 0000005E 48FFC3 inc rbx 90 00000061 EBF1 jmp str_count_loop 91 str_count_done: 92 00000063 4883FA00 cmp rdx, 0 93 00000067 740F je prt_done 94 95 96 00000069 48C7C001000000 mov rax, SYS_write 97 00000070 4889FE mov rsi, rdi 98 00000073 BF01000000 mov edi, STDOUT 99 100 00000078 0F05 syscall 101 102 103 prt_done: 104 0000007A 5B pop rbx 105 0000007B 5D pop rbp 106 0000007C C3 ret 107