.arch armv8-a .file "main.c" .text .global state .data .align 2 .type state, %object .size state, 4 state: .word 1 .global input .bss .align 3 .type input, %object .size input, 100 input: .zero 100 .section .rodata .align 3 .LC0: .string " " .align 3 .LC1: .string "exit" .align 3 .LC2: .string "test" .align 3 .LC3: .string "clear" .align 3 .LC4: .string "unix" .align 3 .LC5: .string "ls" .align 3 .LC6: .string "date" .align 3 .LC7: .string "whoami" .align 3 .LC8: .string "cat" .align 3 .LC9: .string "Usage: cat " .align 3 .LC10: .string "nl" .align 3 .LC11: .string "Usage: nl " .align 3 .LC12: .string "cd" .align 3 .LC13: .string "help" .text .align 2 .global main .type main, %function main: .LFB6: .cfi_startproc stp x29, x30, [sp, -128]! .cfi_def_cfa_offset 128 .cfi_offset 29, -128 .cfi_offset 30, -120 mov x29, sp b .L2 .L20: bl print_shell bl get_input adrp x0, .LC0 add x1, x0, :lo12:.LC0 adrp x0, input add x0, x0, :lo12:input bl strtok str x0, [sp, 112] adrp x0, .LC0 add x1, x0, :lo12:.LC0 mov x0, 0 bl strtok str x0, [sp, 104] ldr x0, [sp, 112] cmp x0, 0 bne .L3 b .L2 .L3: adrp x0, .LC1 add x1, x0, :lo12:.LC1 adrp x0, input add x0, x0, :lo12:input bl strcmp cmp w0, 0 bne .L4 bl do_exit b .L2 .L4: adrp x0, .LC2 add x1, x0, :lo12:.LC2 adrp x0, input add x0, x0, :lo12:input bl strcmp cmp w0, 0 bne .L5 bl test b .L2 .L5: adrp x0, .LC3 add x1, x0, :lo12:.LC3 adrp x0, input add x0, x0, :lo12:input bl strcmp cmp w0, 0 bne .L6 bl clear_screen b .L2 .L6: adrp x0, .LC4 add x1, x0, :lo12:.LC4 adrp x0, input add x0, x0, :lo12:input bl strcmp cmp w0, 0 bne .L7 bl _unix b .L2 .L7: adrp x0, .LC5 add x1, x0, :lo12:.LC5 adrp x0, input add x0, x0, :lo12:input bl strcmp cmp w0, 0 bne .L8 bl ls b .L2 .L8: adrp x0, .LC6 add x1, x0, :lo12:.LC6 adrp x0, input add x0, x0, :lo12:input bl strcmp cmp w0, 0 bne .L9 bl date b .L2 .L9: adrp x0, .LC7 add x1, x0, :lo12:.LC7 adrp x0, input add x0, x0, :lo12:input bl strcmp cmp w0, 0 bne .L10 bl whoami b .L2 .L10: adrp x0, .LC8 add x1, x0, :lo12:.LC8 ldr x0, [sp, 112] bl strcmp cmp w0, 0 bne .L11 ldr x0, [sp, 104] cmp x0, 0 beq .L12 ldr x0, [sp, 104] bl cat b .L2 .L12: adrp x0, .LC9 add x0, x0, :lo12:.LC9 bl puts b .L2 .L11: adrp x0, .LC10 add x1, x0, :lo12:.LC10 ldr x0, [sp, 112] bl strcmp cmp w0, 0 bne .L13 ldr x0, [sp, 104] cmp x0, 0 beq .L14 ldr x0, [sp, 104] bl nl b .L2 .L14: adrp x0, .LC11 add x0, x0, :lo12:.LC11 bl puts b .L2 .L13: adrp x0, .LC12 add x1, x0, :lo12:.LC12 ldr x0, [sp, 112] bl strcmp cmp w0, 0 bne .L15 ldr x0, [sp, 104] bl cd b .L2 .L15: adrp x0, .LC13 add x1, x0, :lo12:.LC13 ldr x0, [sp, 112] bl strcmp cmp w0, 0 bne .L16 bl help b .L2 .L16: str wzr, [sp, 124] ldr w0, [sp, 124] add w1, w0, 1 str w1, [sp, 124] sxtw x0, w0 lsl x0, x0, 3 add x1, sp, 24 ldr x2, [sp, 112] str x2, [x1, x0] b .L17 .L19: ldr w0, [sp, 124] add w1, w0, 1 str w1, [sp, 124] sxtw x0, w0 lsl x0, x0, 3 add x1, sp, 24 ldr x2, [sp, 104] str x2, [x1, x0] .L17: adrp x0, .LC0 add x1, x0, :lo12:.LC0 mov x0, 0 bl strtok str x0, [sp, 104] ldr x0, [sp, 104] cmp x0, 0 beq .L18 ldr w0, [sp, 124] cmp w0, 8 ble .L19 .L18: ldrsw x0, [sp, 124] lsl x0, x0, 3 add x1, sp, 24 str xzr, [x1, x0] add x0, sp, 24 mov x1, x0 ldr x0, [sp, 112] bl execute_program .L2: adrp x0, state add x0, x0, :lo12:state ldr w0, [x0] cmp w0, 0 bne .L20 mov w0, 0 ldp x29, x30, [sp], 128 .cfi_restore 30 .cfi_restore 29 .cfi_def_cfa_offset 0 ret .cfi_endproc .LFE6: .size main, .-main .ident "GCC: (Debian 14.2.0-19) 14.2.0" .section .note.GNU-stack,"",@progbits