程序集和c-按引用调用问题

时间:2019-04-20 10:23:47

标签: assembly x86 nasm

我试图在程序集中实现一个函数,其中第一个参数是输入值,第二个参数是返回值。我只是尝试将返回值设置为输入值。
我已经编写了一个小的C程序来调用此函数。

C代码:

#include <stdio.h>

extern void f1(int,int*);

int main() {
    int z1 = 0;
    int z2;

    scanf("%d", &z1);

    f1(z1,&z2);
    printf("A1: %i\n",z2);

    return 0;
}

汇编代码:

 f1:
        push    ebp
        mov ebp,esp

        mov eax, [ebp+8]
        mov [ebp+12],eax

        pop ebp
        ret

输出应等于输入,但它是一个“随机”负整数值,例如“ -5870340”或“ -3303956”。

1 个答案:

答案 0 :(得分:2)

由于要传递指针,因此需要取消引用以修改值:

 f1:
   push ebp
   mov edx, [ebp+12]
   mov eax, [ebp+8]
   mov [edx], eax
   pop ebp
   ret

因此,捕获指针的值,然后将第一个参数移至其指向的位置。