Skip to content

Instantly share code, notes, and snippets.

@KPCCoiL
Created September 7, 2019 08:48
Show Gist options
  • Save KPCCoiL/77159543a7c3fd77edf4f14706c31d4b to your computer and use it in GitHub Desktop.
Save KPCCoiL/77159543a7c3fd77edf4f14706c31d4b to your computer and use it in GitHub Desktop.
nasm fizzbuzz
section .data
fizz db "Fizz"
buzz db "Buzz"
newline db 10
section .bss
digits resb 32
section .text
global _start
_start:
mov rax, 1
mov r12, 100
call _fizzbuzz
mov rax, 60
xor rdi, rdi
syscall
_nextFB:
call _sayNL
mov rax, r9
inc rax
_fizzbuzz:
mov r9, rax
cmp rax, r12
je _finishFB
mov r8, 0
mov rcx, 3
xor rdx, rdx
div rcx
mov rsi, fizz
cmp rdx, 0
jnz _fizzend
call _sayFB
mov r8, 1
_fizzend:
mov rax, r9
mov rsi, buzz
xor rdx, rdx
mov rcx, 5
div rcx
cmp rdx, 0
jnz _buzzend
call _sayFB
mov r8, 1
_buzzend:
mov rax, r9
cmp r8, 0
jnz _nextFB
call _printNum
mov rax, r9
jmp _nextFB
_finishFB:
ret
_sayFB:
mov rax, 1
mov rdi, 1
mov rdx, 4
syscall
ret
_sayNL:
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
ret
_initDigits:
mov rax, digits
mov rbx, rax
add rbx, 32
_loopInitDigits:
mov [rax], byte 0
inc rax
cmp rax, rbx
jne _loopInitDigits
ret
_digitfy:
xor rdx, rdx
mov rsi, 10
div rsi
mov [rbx], dl
inc rbx
cmp rax, 0
jz _digitfyFin
call _digitfy
_digitfyFin:
ret
_printNum:
push rax
call _initDigits
pop rax
mov rbx, digits
call _digitfy
_eachdig:
dec rbx
call _printDigit
cmp rbx, digits
jne _eachdig
ret
_printDigit:
add [rbx], byte 48
mov rax, 1
mov rdi, 1
mov rsi, rbx
mov rdx, 1
syscall
ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment