Files
RTS10_labs/assignment_assembly/assignment7/power.asm

45 lines
920 B
NASM

.cpu cortex-m4
.thumb
.syntax unified
.globl power
.text
.thumb_func
// R5 = n, R6 = m, R4 = result (p)
power:
PUSH.N {R4, R5, R6}
SUB.N SP, SP, #4
STR LR, [SP, #0] // push LR to the stack
MOVS.N R4, #1 // set result to 1
CMP.N R1, #0
BEQ.N exit // goto exit if m == 0
MOVS.N R5, R0 // move n to R5
MOVS.N R6, R1 // move m to R6
loop:
CMP.N R6, #1
BEQ.N exit // goto exit if m == 1
MOVS.N R3, #1
ANDS.N R3, R6 // R3 = m & 0x1
BEQ.N even
MOVS.N R0, R4
MOVS.N R1, R5
LDR.N R3, =multiply
BLX.N R3 // p * n
MOVS.N R4, R0 // move multiply result to p
even:
MOVS.N R0, R5
MOVS.N R1, R5
LDR.N R3, =multiply
BLX.N R3 // p * n
MOVS.N R5, R0 // move multiply result to n
LSRS.N R6, R6, #1 // m = m >> 1
B.N loop
exit:
MOVS.N R0, R4
MOVS.N R1, R5
LDR.N R3, =multiply
BLX.N R3 // p * n
LDR LR, [SP, #0] // pop LR from the stack
ADD.N SP, SP, #4
POP.N {R4, R5, R6}
BX.N LR