IPo*_*Fan 1 c x86 assembly nasm pass-by-reference
我正在编写一个小的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;
}
Run Code Online (Sandbox Code Playgroud)
我从以下汇编程序中收到结果:
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
Run Code Online (Sandbox Code Playgroud)
通过调试,我知道我最终在eax中得到了正确的值。但是以某种方式,我无法使其由C程序打印。您能给我一个解决方法的提示吗?
如有必要,我正在使用NASM和GCC。
您不需要为此的指针。无论如何,如果您(或分配)坚持,则必须1)在C侧初始化所述指针,并2)在asm侧通过该指针写入。
例如
int value;
int* result = &value;
Run Code Online (Sandbox Code Playgroud)
和
mov ecx, [ebp+12]
mov [ecx], eax
Run Code Online (Sandbox Code Playgroud)