; fizzbuzz.asm
|
|
; Prints numbers 1 to 100, however if the number is a multiple of 3 it will print Fizz,
|
|
; and if the number is a multiple of 5 it will print Buzz. If the number is a multiple
|
|
; of both, it will print FizzBuzz
|
|
; Compile with "nasm -f elf64 fizzbuzz.asm && ld fizzbuzz.o -o fizzbuzz"
|
|
|
|
%include 'macros.asm'
|
|
|
|
.text:
|
|
global _start
|
|
|
|
_start:
|
|
mov rcx,0 ; counter
|
|
mov rsi,0 ; fizz check
|
|
mov rdi,0 ; buzz check
|
|
|
|
loop:
|
|
inc rcx
|
|
|
|
check_fizz:
|
|
mov rdx,0
|
|
mov rax,rcx
|
|
mov rbx, 3
|
|
div rbx
|
|
mov rsi,rdx
|
|
cmp rsi,0
|
|
jne check_buzz
|
|
printStr f
|
|
|
|
check_buzz:
|
|
mov rdx,0
|
|
mov rax,rcx
|
|
mov rbx, 5
|
|
div rbx
|
|
mov rdi,rdx
|
|
cmp rdi,0
|
|
jne check_int
|
|
printStr b
|
|
|
|
check_int:
|
|
cmp rsi,0
|
|
je cont
|
|
cmp rdi,0
|
|
je cont
|
|
printInt rcx
|
|
|
|
cont:
|
|
printStr n
|
|
cmp rcx,99
|
|
jle loop
|
|
exit 0
|
|
|
|
.data:
|
|
; initialize doubleword msg variable
|
|
f db 'Fizz',0x0
|
|
b db 'Buzz',0x0
|
|
n db 0xA,0x0
|