LINUX.ORG.RU

gcc inline asm amd64


0

0

unsigned int x;
asm("mov %%rsp, %0" : "=r"(x));

вопрос:
rsp - это расширенный регистр в amd64(esp - для x86)
как скомпилить, чтобы rsp правильно распознался(просто не компилится). компилятор не знает такого регистра, он знает esp.
если пишу esp, то значение в переменную х кладется какое-то другое, а не то, что находится в rsp(хотя по длине числа одинаковые). посмотрел в дебаггере.


Ответ на: комментарий от mv

Вместо rsp можешь esp написать, компилятор по типу x догадается, что тебе нужно, и код будет компилироваться и работать на 32 и 64 битах нормально. В *sp содержится указатель, поэтому тип x должен быть long, а не int (int на 64-битной машине - 32-битный).

mv ★★★★★
()
Ответ на: комментарий от mv

точно! спасибо. я чет протупил. спас unsigned long x, а ругался компилятор не на rsp, а на короткий тип переменной :)

err0r
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.