Я пытаюсь получить доступ к первому элементу массива целых чисел, эквивалент 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
?