Skip to content

Instantly share code, notes, and snippets.

@glinesbdev
Created August 22, 2019 04:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save glinesbdev/44b0fe08b69c0144f74cc0d67a8871e6 to your computer and use it in GitHub Desktop.
Save glinesbdev/44b0fe08b69c0144f74cc0d67a8871e6 to your computer and use it in GitHub Desktop.
MacOS Assembly - Triangle
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
@glinesbdev
Copy link
Author

To compile:

nasm -fmacho64 triangle.asm
gcc -o triangle.o triangle
./triangle

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment