【发布时间】:2011-05-04 20:40:25
【问题描述】:
我正在阅读“计算机系统:程序员视角”,第 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
CPU 将 +8 字节向上移动堆栈(从帧指针 %ebp),获取存储在该位置的值,并将该值存储在寄存器 %eax(强调 - 存储值,而不是地址)
我是对的? 谢谢!
【问题讨论】:
标签: assembly