Last active
December 8, 2020 21:08
-
-
Save kiobu/3e23d28a2e3eccce4dd5e3d4c54cafb8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; ---------------------------------------------------------------------------------------- | |
; This is an OSX console program that writes a little triangle of asterisks to standard | |
; output. Runs on macOS only. | |
; | |
; nasm -fmacho64 triangle.asm && gcc hola.o && ./a.out | |
; ---------------------------------------------------------------------------------------- | |
global _start | |
section .text | |
_start: | |
mov rdx, output ; rdx holds address of next byte to write | |
mov r8, 1 ; initial line length | |
mov r9, 0 ; number of stars written on line so far | |
line: | |
mov byte [rdx], '*' ; write single star | |
inc rdx ; advance pointer to next cell to write | |
inc r9 ; "count" number so far on line | |
cmp r9, r8 ; did we reach the number of stars for this line? | |
jne line ; not yet, keep writing on this line | |
lineDone: | |
mov byte [rdx], 10 ; write a new line char | |
inc rdx ; and move pointer to where next char goes | |
inc r8 ; next line will be one char longer | |
mov r9, 0 ; reset count of stars written on this line | |
cmp r8, maxlines ; wait, did we already finish the last line? | |
jng line ; if not, begin writing this line | |
done: | |
mov rax, 0x1 ; system call for write | |
mov rdi, 1 ; file handle 1 is stdout | |
mov rsi, output ; address of string to output | |
mov rdx, dataSize ; number of bytes | |
syscall ; invoke operating system to do the write | |
mov rax, 0x3C ; system call for exit | |
xor rdi, rdi ; exit code 0 | |
syscall ; invoke operating system to exit | |
section .bss | |
maxlines equ 8 | |
dataSize equ 44 | |
output: resb dataSize |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment