Встроенная сборка на локальном массиве - PullRequest
0 голосов
/ 18 мая 2018

Встроенная сборка в коде ниже дает мне segfault, не могу понять, почему.

#include <stdio.h>

void printArray(const int a[], int n) {
  for (int i = 0; i < n; i++)
    printf("%d, ", a[i]);

  putchar('\n');

}


void myfunc() {
  int array[10] = {1,2,3,4,5,6,7,8,9,10};

  printArray(array,10);

  for (int i = 0; i < 10; i++) {
    asm volatile ("mov eax, [ebx+4*esi];"
          "lea eax, [eax+8*eax];"
          "mov [ebx+4*esi], eax"
          :  : "b" (array), "S" (i) : "memory", "eax");
  }

  printArray(array,10);
}

int main() {
  myfunc();
}

PS:

  • Это команда "mov eax, [ebx + 4 * esi]", которая вызывает segfualt.
  • Это синтаксис intel, так что вам нужно скомпилировать с опцией -masm = intel.
  • Это прекрасно работает, когда «массив» определен как глобальная переменная.
...