Передача массива во внешнюю сборочную функцию - PullRequest
1 голос
/ 13 января 2011

Как-то связано с этим вызовом функций сборки из c

Я передаю этой функции массив int и длину:

do_stuff_in_asm (array, len);

Сборочная деталь выглядит следующим образом

...................
movl 8(%ebp), %eax
movl 12(%ebp), %ecx
movl $0, %edi
...................
movl (%eax,%edi,4), %edx
pushl %edx
pushl $printtext
call printf
addl $8, $esp
..................

Я могу напечатать аргумент len 12 (% ebp), но каждый раз, когда я пытаюсь делать то же самое на% edx, который должен быть первым элементом массива, я получаю ошибку сегментации.

int *array, n, i;

printf ("Give array size: ");
scanf("%d",&n);

array = malloc (n * sizeof(int));

Тогда он заполняется данными.

1 Ответ

0 голосов
/ 13 января 2011

Вы должны были опубликовать полный код.В качестве иллюстрации я написал этот пример программы .Обратите внимание, что это только встроенный asm, поэтому ideone может скомпилировать его из одного файла.Как вы видите, код, который вы разместили, при правильном использовании работает.Так что проблема должна быть в какой-то другой части, которую вы пропустили.

...