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