Я бы подхожу к этому, выполняя рукописную математику с примечаниями, например:
movl 8(%ebp), %edx /* index i */
-> edx = i
movl 12(%ebp), %ecx /* index j */
-> ecx = j
movl %edx, %eax
-> eax = i
sall $4, %eax
-> eax = 16 * i
subl %edx, %eax
-> eax -= i, thus:
-> eax = 16 * i - i = 15 * i
addl %ecx, %eax
-> eax += j, thus:
-> eax = 15 * i + j
movl (%ebx,%eax,4), %eax
-> eax = array[4 * eax], thus:
-> eax = array[sizeof(int) * (15 * i + j)]
Итак, в конце eax
вы получите то, что находится в данном массиве (указаноebx
в начале) в позиции 15 * i + j
.Это может правильно адресовать:
- массив int
- массив с 15 для его первого (самого правого) измерения
Учитывая это и ваштри массива:
int a[10][10];
int b[10][15];
int c[10][30];
это адрес b
правильно, но не a
или c
.