.section .data isort: .string "isort" qsort: .string "qsort" .section .text .globl _start _start: cmpq $2, (%rsp) # Check if there are only two arguments jne algorithm_selected # If not, go to algorithm_selected default: movq 16(%rsp), %rdi # Select first argument as file name movq $0, %rsi # Select read only movq $0, %rdx # Unused mode for read only movq $2, %rax # Select open syscall syscall # Open file, file descriptor returned in rax movq %rax, %r13 # Save file descriptor in r13 jmp select_quicksort # Select quicksort algorithm_selected: movq 32(%rsp), %rdi # Select third argument as file name movq $0, %rsi # Select read only movq $0, %rdx # Unused mode for read only movq $2, %rax # Select open syscall syscall # Open file, file descriptor returned in rax movq %rax, %r13 # Save file descriptor in r13 .check_insertion_sort: movq 24(%rsp), %rdi # Select algorithm string movq $isort, %rsi # Select "isort" to compare with call strcmp # Compare cmp $1, %rax # If the strings where equal je select_insertionsort # Select insertionsort .check_quicksort: movq 24(%rsp), %rdi # Select algorithm string movq $qsort, %rsi # Select "qsort" to compare with call strcmp # Compare cmp $1, %rax # If the strings where equal je select_quicksort # Go to selection_done .else_invalid_algorithm: movq $60, %rax # Select exit syscall movq $1, %rdi # Exit code 1 syscall # Exit select_insertionsort: movq $insertion_sort, %r14 # Select insertion_sort in r14 jmp the_rest select_quicksort: movq $quicksort, %r14 # Select quicksort in r14 jmp the_rest the_rest: # Convert to array movq %r13, %rdi # Select file descriptor call make_array_from_file # Convert file to array format movq %rdx, %r15 # Save length of array in r15 # Sort movq %rax, %rdi # Select address of array movq %r15, %rsi # Select number of coordinates movq $1, %rdx # Sort by key 1 call *%r14 # Sort the array # Convert array to string # in tsv format movq %rax, %rdi # Select the pointer to the array movq %r15, %rsi # Select length of array call tub2tsv # Print array # print string to stdout movq %rax, %rsi movq $1, %rax movq $1, %rdi syscall # Exit movq $60, %rax movq $0, %rdi # Exit code 0 syscall