У меня есть следующий код C, который возвращает 9:
#include <stdio.h>
int main()
{
int array[4]={0};
array[2]=9;
return array[2];
}
Чтобы выполнить то же самое на языке ассемблера, который я пробовал:
.section .data
array: .zero 4
.section .text
.globl _start
_start:
mov $2,%esi
mov array(,%esi,4),%ecx # copy address of array[2] to %ecx
mov $9,%ecx
mov $1,%eax
mov array(,%esi,4),%ebx # return the value of array[2]
int $0x80
собран и связан с:
gcc -g -c array.s && ld array.o && ./a.out
Однако эта программа возвращает 0
вместо 9
:
>./a.out
>echo $?
0
Я подозреваю, что проблема в строках с комментариями.После различных неудачных попыток найти проблему я решил задать вопрос: как изменить значение элемента массива (в данном случае array[2]
) в сборке?