сборка и с - проблема вызова по ссылке - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь реализовать функцию в сборке, где первый параметр является входным значением, а второй параметр является возвращаемым значением. Я просто пытаюсь установить возвращаемое значение для входного значения.
Я написал небольшую программу на 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

Выходной сигнал должен быть равен входному значению, но это «случайное» отрицательное значение типа int, например «-5870340» или «-3303956».

1 Ответ

2 голосов
/ 20 апреля 2019

Поскольку вы передаете указатель, вам нужно разыменовать его, чтобы изменить значение:

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

Итак, захватите значение указателя, а затем переместите первый параметр в местоположение, на которое он указывает.

...