; A program that prints a simple pyramid of stars ('*') to stdout.
section .bss
maxlines equ 8
dataSize equ 44
output: resb dataSize
section .text
global _start
_start:
mov rdx, output ; rdx = pointer to buffer
mov r8, 1 ; current line length
xor r9, r9 ; stars written in current line
line:
mov byte [rdx], '*' ; write '*'
inc rdx ; advance pointer
inc r9 ; increment count
cmp r9, r8 ; reached line length?
jne line ; if not, continue line
lineDone:
mov byte [rdx], 10 ; newline '\n'
inc rdx
inc r8 ; next line length++
xor r9, r9 ; reset star counter
cmp r8, maxlines
jle line ; continue if r8 <= maxlines
done:
; write(stdout, output, dataSize)
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
mov rsi, output ; buffer
mov rdx, dataSize ; size
syscall
; Exit
mov rax, 60 ; sys_exit
xor rdi, rdi
syscall