Created
August 22, 2019 04:13
-
-
Save glinesbdev/44b0fe08b69c0144f74cc0d67a8871e6 to your computer and use it in GitHub Desktop.
MacOS Assembly - Triangle
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
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 on 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, 0x2000004 ; 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, 0x2000001 ; system call for exit | |
xor rdi, rdi ; exit code 0 | |
syscall | |
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
To compile:
nasm -fmacho64 triangle.asm
gcc -o triangle.o triangle
./triangle