【发布时间】:2011-06-27 03:05:38
【问题描述】:
我通常不会花太多时间阅读汇编,所以下面的编译器输出让我有点困惑。
假设我在运行 OSX 10.6 的 Intel Core 2 Duo 上编译这段 C 代码:
while (var != 69) // var is a global variable
{
printf("Looping!\n");
}
“var != 69”比较的程序集如下所示:
cmpl $69, _var(%rip)
我知道这实际上意味着将值“69”与全局变量“var”的内容进行比较,但我很难理解“_var(%rip)”部分。通常,我希望有一个偏移值,例如引用堆栈中的局部变量(例如:-4($ebp))。但是,我不太了解使用“_var”声明偏移指令指针会给我全局变量“var”的内容。
那条线到底是什么意思?
谢谢。
【问题讨论】: