typedef struct {
char array[B];
int t;
short s[B];
int u;
} str2;
typedef struct {
short x[A][B];
int y;
} str1;
void setVal{str1* p, str2 *q) {
int v1 = q->t;
int v2 = q->u;
p->y = v1+v2;
}
movl 12(%ebp), %eax
movl 40(%eax), %edx
addl 12(%eax), %edx
movl 8(%ebp), %eax
movl %edx, 96(%eax)
У меня возникают проблемы с пониманием IA32 код. Я понимаю, что первая команда movl указывает% eax = q, а четвертая команда movl указывает% eax = p, но я не понимаю, что означает вторая, третья и пятая команды. Я думаю, что вторая инструкция означает, что q + B (char 1byte) = q + 40. Правильно ли это?Что делает этот код для определения размера массива?
Итак, размер массива «массив» и «s» равен 40? –
@FutureBillionaire 'array' должен быть в индексе' 0' (адрес первого члена должен совпадать с адресом 'struct'). 't' следует, затем' s', затем 'u', поскольку переменные-члены не могут быть переупорядочены в' struct'. Так как '' 'предшествует' u' в 'struct', он должен быть в нижнем индексе, т. Е.' 12'. 'u' находится на' 40'. Это означает 'sizeof (array) = 12 + padding' и' sizeof (s) = 40 - & s'. (Это только псевдокод и не компилируется.) – Downvoter