main
mov rbp, rsp
add rsp, -40
mov r1, 2
main_loop
push r1
call check_for_prime
mov r2, rbp
mov r3, r1
mov r4, 4
mul r3, r4
sub r2, r3
mov [r2], r0
add r1, 1
cmp r1, 10
je main_hlt
jmp main_loop
main_hlt
hlt
check_for_prime :
push rbp
mov rbp, rsp
; we are going to use r0, r1 and r2
; however, r0 is the return register, so we do not need to save its value
push r1
push r2
mov r0, rbp
add r0, 8
mov r0, [r0]
mov r1, 2 ; r1 is the number we check against r0
check_for_prime_loop :
mov r2, r1
mul r2, r2
cmp r2, r0
jg check_for_prime_return_true
mov r2, r0
mod r2, r1
cmp r2, 0
jz check_for_prime_return_false
add r1, 1
jmp check_for_prime_loop
check_for_prime_return_false :
mov r0, -1
jmp check_for_prime_return
check_for_prime_return_true :
mov r0, 1
jmp check_for_prime_return
check_for_prime_return :
pop r2
pop r1
pop rbp
ret