Ошибка при доступе к элементу массива в индексе со сборкой Mac x86 - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь получить доступ к первому элементу массива целых чисел, эквивалент c/c++ равен int first_val = arr[0], однако после компиляции с gcc и запуска с ./a.out возникает ошибка. Ниже приведен код и ошибка:

.data
  myarray:.int 1, 2, 3, 4, 5

.text
.globl _main

_main:
  pushq %rbp
  movq %rsp, %rbp
  subq $16, %rsp
  movl $0, %eax
  movl myarray(%rip), %edx
  movl (%edx, %eax, 4), %eax
  leave
  ret

При запуске после компиляции возникает следующая ошибка:

Ошибка сегментации: 11

Я использую x86 Сборка на MacOS с синтаксисом AT & T. Я также попытался заменить регистры edx и eax на регистры rdi и rsi, как показано ниже, однако возникла новая ошибка:

movl $0, %rsi;
movl myarray(%rip), %rdi
movl (%rdi, %rsi, 4), %eax;

подпрограммы.s: 15: 12: ошибка: недопустимый операнд для инструкции movl $ 1,% rsi;

Кто-нибудь знает, как можно сохранить первый элемент массива в eax, зарегистрированном без segmentation fault?

...