%include "CONSTANTS.h" section .data msgFMT: db `%d ^ %d = %ld\n`,0 section .bss section .text global main main: ;mov rdi, format1 ;mov rsi, -1 ;call CallPrintf mov r12, 0 TopOfTestLoop: cmp r12, 31 je .done mov rdi, 2 mov rsi, r12 call POW mov rdi, msgFMT mov rsi, 2 mov rdx, r12 mov rcx, rax call CallPrintf inc r12 jmp TopOfTestLoop .done: jmp Exit POW: ; long POW(long base, unsigned long exp) { ; if (exp == 0) { ; return base ; } else { ; return base * POW(base, exp-1) ; } ; } ; ; rdi will hold base ; rsi will hold exponent ; assume exponent >= 0 push rbp mov rbp, rsp cmp rsi, 0 jne .else mov rax, 1 jmp .done .else: ; rdi already holds base push rdi ; rsi should be decrementd by 1 dec rsi call POW pop rdi mul rdi .done: pop rbp ret