Обычно я не трачу много времени на чтение сборки, поэтому следующий вывод компилятора смутил меня. немного.
Допустим, я компилирую этот фрагмент кода C на моем 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».
Что именно означает эта строка?
Спасибо.