Я читаю «Компьютерные системы: перспектива для программиста», в главе 3 объясняется mov
инструкция, а объяснение, данное в книге, смущает меня.
дать функцию (стр. 142 1-е издание)
int exchange( int *xp, int y)
{
int x = *xp;
*xp = y;
return x;
}
Код сборки тела функции
movl 8(%ebp), %eax //Get xp
movl 12(%ebp), %edx //Get y
movl (%eax), %ecx //Get x at *xp
movl %edx, (%eax) //Store y at *xp
movl %ecx, %eax //Set x as return value
Что меня смущает, что будет храниться и где
Вот как я понимаю это:
movl 8(%ebp), %eax //Get xp
Процессор перемещается на + 8 байт вверх по стеку (от указателя кадра %ebp
), принимает значение, сохраненное в этом месте, и сохраняет это значение в регистре %eax
(для выделения - сохраняет значение, а не адрес)
Я прав?
Спасибо!