Адресация указателя инструкции сборки X86

Обычно я не трачу много времени на чтение сборки, поэтому следующий вывод компилятора смутил меня. немного.

Допустим, я компилирую этот фрагмент кода 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».

Что именно означает эта строка?

Спасибо.

10
задан lhumongous 27 June 2011 в 03:05
поделиться