У меня есть пример .Для моей задачи мне нужно использовать float
вместо int
:
#include <stdio.h>
extern float my_pow(float base, float exp);
int main(int argc, char const *argv[]) {
float base = 2.0, exp = 8.0;
printf("Result: %f\n", my_pow(base, exp));
return 0;
}
Сборка с использованием nasm и gcc:
nasm -f macho64 calc.asm
gcc -m64 -o main main.c calc.o
В качестве вывода я получаю это:
Result: 2.000000
Когда мой результат должен быть 256.0
.Что я делаю не так?
ОБНОВЛЕНИЕ: мой asm-код не изменился
global _my_pow
section .text
_my_pow:
push rbp ; create stack frame
mov rbp, rsp
cmp edi, 0 ; Check if base is negative
mov eax, 0 ; and return 0 if so
jl end
mov eax, edi ; grab the "base" argument
mov edx, esi ; grab the "exponent" argument
multiply:
imul eax, edi ; eax * base
sub esi, 1 ; exponent - 1
cmp esi, 1 ; Loop if exponent > 1
jg multiply
end:
pop rbp ; restore the base pointer
ret ; return from procedure