1 %line 1+1 cmd_line.asm 2 3 4 5 6 [section .note.GNU-stack] 7 8 [section .data] 9 10 LF equ 10 11 NULL equ 0 12 13 TRUE equ 1 14 FALSE equ 0 15 16 EXIT_SUCCESS equ 0 17 18 STDIN equ 0 19 STDOUT equ 1 20 STDERR equ 2 21 22 SYS_read equ 0 23 SYS_write equ 1 24 SYS_open equ 2 25 SYS_close equ 3 26 SYS_fork equ 57 27 SYS_exit equ 60 28 SYS_creat equ 85 29 SYS_time equ 201 30 31 00000000 0A0A00 newLine db LF, LF, NULL 32 33 [section .text] 34 35 [global main] 36 main: 37 38 39 40 41 00000000 4989FC mov r12, rdi 42 00000003 4989F5 mov r13, rsi 43 44 45 46 47 printArguments: 48 00000006 48C7C7[00000000] mov rdi, newLine 49 0000000D E87A000000 call printString 50 51 52 00000012 48C7C300000000 mov rbx, 0 53 00000019 48C7C100000000 mov rcx, 0 54 00000020 49C7C000000000 mov r8, 0 55 56 57 printLoop0: 58 00000027 498B7CDD00 mov rdi, qword [r13+rbx*8] 59 0000002C E85B000000 call printString 60 61 00000031 48C7C7[00000000] mov rdi, newLine 62 00000038 E84F000000 call printString 63 64 printLoop1 65 0000003D 498B7CCD00 mov rdi, qword [r13+rcx*8] 66 00000042 E845000000 call printString 67 68 00000047 48C7C7[00000000] mov rdi, newLine 69 0000004E E839000000 call printString 70 71 printLoop2 72 00000053 4B8B7CC500 mov rdi, qword [r13+r8*8] 73 00000058 E82F000000 call printString 74 75 0000005D 48C7C7[00000000] mov rdi, newLine 76 00000064 E823000000 call printString 77 78 00000069 48FFC3 inc rbx 79 0000006C 4C39E3 cmp rbx, r12 80 0000006F 7CB4 jl printLoop0 81 82 00000071 48FFC1 inc rcx 83 00000074 4C39E1 cmp rcx, r12 84 00000077 7CC2 jl printLoop1 85 86 00000079 49FFC0 inc r8 87 0000007C 4D39E0 cmp r8, r12 88 0000007F 7CD0 jl printLoop2 89 90 91 clDone: 92 00000081 48C7C03C000000 mov rax, SYS_exit 93 00000088 48C7C700000000 mov rdi, EXIT_SUCCESS 94 0000008F 0F05 syscall 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 [global printString] 114 printString: 115 116 00000091 55 push rbp 117 00000092 4889E5 mov rbp, rsp 118 00000095 53 push rbx 119 00000096 51 push rcx 120 00000097 4150 push r8 121 122 123 124 00000099 4889FB mov rbx, rdi 125 0000009C 4889F9 mov rcx, rdi 126 0000009F 4989F8 mov r8, rdi 127 000000A2 48C7C200000000 mov rdx, 0 128 129 130 strCountLoop0: 131 000000A9 803B00 cmp byte[rbx], NULL 132 000000AC 7421 je strCountDone 133 000000AE 48FFC2 inc rdx 134 000000B1 48FFC3 inc rbx 135 000000B4 EBF1 jmp strCountLoop0 136 137 138 strCountLoop1: 139 000000B6 803900 cmp byte[rcx], NULL 140 000000B9 7414 je strCountDone 141 000000BB 48FFC2 inc rdx 142 000000BE 48FFC1 inc rcx 143 000000C1 EBF1 jmp strCountLoop1 144 145 146 strCountLoop2: 147 000000C3 41803800 cmp byte[r8], NULL 148 000000C7 7406 je strCountDone 149 000000C9 48FFC2 inc rdx 150 000000CC 49FFC0 inc r8 151 000000CF EBF0 jmp strCountLoop2 152 153 154 strCountDone: 155 000000D1 4883FA00 cmp rdx, 0 156 000000D5 740F je printDone 157 158 159 160 000000D7 48C7C001000000 mov rax, SYS_write 161 000000DE 4889FE mov rsi, rdi 162 000000E1 BF01000000 mov edi, STDOUT 163 164 000000E6 0F05 syscall 165 166 printDone: 167 168 000000E8 4158 pop r8 169 000000EA 59 pop rcx 170 000000EB 5B pop rbx 171 000000EC 5D pop rbp 172 000000ED C3 ret