%include "MY_IO.h" ; Because my memory is not working ; x /11g $rsp section .data base dd 2 power dd 12 section .bss buffer resb 16 section .text global _start Power: ; parameters: ; rdi: the base ; esi: the power ; set up for the function. push rbp ; save the current base pointer mov rbp, rsp ; set the base pointer to point to the current stack pointer push rsi ; not needed but we want to look at it. ; if power == 0 test esi, esi jnz power_recurse mov rax, 1 ; rax = 0 jmp power_exit power_recurse: dec esi ; power-- call Power ; rax = power(base, power) mul edi ; rax = base * rax power_exit: ; at this point, rax contains the return value ; right now the stack contains ra, rbp, esi pop rsi ; remove esi from the stack pop rbp ; restore the base pointer ret _start: mov edi, [base] mov esi, [power] call Power mov rdi, rax call PRINT_INT ; Exit mov eax, SYS_EXIT mov edx, SUCCESS syscall