.set LOOP_END, 60
.set LOOP_START, 1
.set FIZZBUZZ_NUM, 15
.set FIZZ_NUM, 3
.set BUZZ_NUM, 5
.set EXIT, 60
.set EXIT_CODE, 1
.data
fizz:
.string "Fizz"
buzz:
.string "Buzz"
fizzbuzz:
.string "FizzBuzz"
num_str:
.string "%d\n"
end_string:
.string "\nComplete FizzBuzz!!"
.text
.globl main
fizz_write:
leaq fizz(%rip), %rdi
call puts@PLT
jmp loop_inc
buzz_write:
leaq buzz(%rip), %rdi
call puts@PLT
jmp loop_inc
fizzbuzz_write:
leaq fizzbuzz(%rip), %rdi
call puts@PLT
jmp loop_inc
num_write:
leaq num_str(%rip), %rdi
movq %r13, %rsi
xor %rax, %rax
call printf@PLT
jmp loop_inc
loop_process:
cmpq %r13, %r12
jl end_process
movq $0, %rdx
movq %r13, %rax
movq $FIZZBUZZ_NUM, %r14
divq %r14
cmpq $0, %rdx
je fizzbuzz_write
movq $0, %rdx
movq %r13, %rax
movq $FIZZ_NUM, %r14
divq %r14
cmpq $0, %rdx
je fizz_write
movq $0, %rdx
movq %r13, %rax
movq $BUZZ_NUM, %r14
divq %r14
cmpq $0, %rdx
je buzz_write
movq $0, %rdx
movq $0, %rax
jmp num_write
loop_inc:
inc %r13
jmp loop_process
main:
movq $LOOP_START, %r13 /* r13をloopカウントにする */
movq $LOOP_END, %r12
jmp loop_process
end_process:
leaq end_string(%rip), %rdi
call puts@PLT
movq $EXIT, %rax /* exit */
movq $EXIT_CODE, %rdi
syscall
ret