Что означает / делает знак равенства g "= g" во встроенной сборке GCC? - PullRequest
6 голосов
/ 12 июня 2011

Я не уверен, что делает эта встроенная сборка:

asm ("mov %%esp, %0" : "=g" (esp));

особенно деталь : "=g" (esp).

Ответы [ 2 ]

9 голосов
/ 12 июня 2011

Если вам нужны подробности, прочитайте документацию GCC по Extended Asm .

Короткий ответ - это перемещение указателя стека x86 (регистр% esp) в переменную C с именем "esp". «= G» сообщает компилятору, какие виды операндов он может заменить %0 в коде сборки. (В данном случае это «общий операнд», что означает, что практически любой регистр или ссылка на память разрешены.)

9 голосов
/ 12 июня 2011

"=g" (esp) определяет выход для встроенной сборки.g сообщает компилятору, что он может использовать любой общий регистр или память для хранения результата.(esp) означает, что результат будет сохранен в переменной c с именем esp.mov %%esp, %0 - это команда сборки, которая просто перемещает указатель стека в 0-й операнд (вывод).Поэтому эта сборка просто хранит указатель стека в переменной с именем esp.

...