Обычно я не трачу много времени на сборку, поэтому следующий вывод компилятора меня немного смутил.
Скажем, я скомпилирую этот фрагмент кода на моем Intel Core 2 Duo под управлением OSX 10.6:
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".
Что именно означает эта линия?
Спасибо.