classPow.asm

URL: https://mirkwood.cs.edinboro.edu/~bennett/class/cmsc3100/spring2026/notes/functions/code/classPow.asm
 

%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