【发布时间】:2019-04-23 14:41:27
【问题描述】:
我正在编写一个小的 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 中得到了正确的值。但不知何故,我的 C 程序无法打印它。 你能告诉我如何解决这个问题吗?
如有必要,我正在使用 NASM 和 GCC。
【问题讨论】:
-
您将未初始化的指针传递给函数。不清楚为什么你使用指针而不是简单地返回一个值。
-
我的任务是这样做:p 没有得到函数初始化的指针?
-
在 C 中,您按值传递变量。除非您获得传递的该变量的地址,否则您不能从被调用函数中更改调用者范围内的变量。你需要为那个指针变量做一些内存分配......
标签: c assembly x86 nasm pass-by-reference