## Assembly Sorting CLI Tool for Linux (x86_64) The purpose of this project is to design and implement a command-line sorting utility in **x86_64/Linux assembly**, demonstrating performance optimization, software engineering best practices, and professional deployment workflows. --- ## To-do - [ ] Command-line arguments parser - [ ] Handlers - [ ] Reverse handler - [ ] Output handler - [x] Version handler - [ ] Help handler - [ ] Default handler - [ ] `strcmp` function - [ ] **Discuss exit codes** - [ ] **Testing** > [!NOTE] > Using a shell script instead of **GitLab CI** - [x] Test for **stable** sorting algorithm - [ ] Test for **unstable** sorting algorithms - [ ] **Benchmarking** > [!NOTE] > Possibly via a shell script. > Use `time` to measure execution time. > Run benchmarks on different dataset: > Random, almost sorted > Test program overhead. > Maybe export to `json` or similar. - [ ] **Documentation** - [ ] Usage Message - [x] Man Page - [ ] Read me file - [x] **Packaging / Deployment** > [!NOTE] > Build target for distributed tarballs (`.tar.gz`) > Arch Linux package (`makepkg`) - [ ] **Report** --- ## Scope ### Product Specification - Provide a **CLI sorting tool** capable of reading from files and `stdin`. - Support **multiple sorting modes** via flags: - Ascending (default) - Descending (`-r` or `--reverse`) - Select sorting algorithm (`-a` or `--algorithm=`) - Implement in **x86_64 Linux assembly**. - Include automated **Building, testing, benchmarking, and packaging** --- ## Doc ### Function / Procedure Header Docstring ```asm # -------------------------------------------- # FUNCTION: my_function # PURPOSE : Adds two integers # INPUTS : eax = first integer # ebx = second integer # OUTPUTS : eax = sum # CLOBBERS: none # NOTES : Preserves all registers except eax # -------------------------------------------- ``` --- ## Git setup ### Commit messages ```git (): # Summary should be concise (max 72 chars), written in present tense. # Keep it clear and descriptive — what is changing and why? # -------------------------------------------------------- # Optional body: # Use this section to explain the change in more detail. # Focus on the *what* and *why*, not the *how* unless needed. # Wrap lines at 72 characters. # -------------------------------------------------------- # Optional footer: # - Mention related issues or PRs (Closes #123, etc.) # - Use BREAKING CHANGE: for breaking changes # -------------------------------------------------------- # Valid values: # # feat - A new feature # fix - A bug fix # docs - Documentation changes only # style - Code style changes (formatting, missing semi-colons, etc.) # refactor - Code changes that neither fix a bug nor add a feature # perf - Performance improvements # test - Adding or updating tests # chore - Changes to build process, tooling, or other non-code tasks # ci - Changes to CI configuration or scripts # build - Changes that affect the build system or external dependencies # -------------------------------------------------------- ``` ---