Я пишу небольшую ASM / C-программу для расчета количества делителей числа.Я получил следующую функцию C:
#include <stdio.h>
extern void getDivisorCounter(int value, int* result);
int main(int argc, char** argv) {
int number;
printf("Please insert number:\n");
scanf("%d", &number);
int* result;
getDivisorCounter(number, result);
printf("amount of div: %d\n", *result);
return 0;
}
, где я получаю результат от следующей программы на ассемблере:
section .text
global getDivisorCounter
getDivisorCounter:
push ebp
mov ebp, esp
mov ecx, [ebp+8]
mov eax, 0
push ebx
for_loop:
mov ebx, ecx
jmp checking
adding:
add ebx, ecx
checking:
cmp ebx, [ebp+8]
jg looping
jl adding
inc eax
looping:
loop for_loop
mov [ebp+12], eax
pop ebx
pop ebp
ret
Отладка, я знаю, что я получаю правильное значениев eax.Но так или иначе я не могу заставить это быть напечатанным моей программой на Си.Не могли бы вы дать мне подсказку, как решить эту проблему?
При необходимости я использую NASM и GCC.