NASM Coding: More Programs

  1. ; 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