Как использовать макрос препроцессора в базовом ассемблере GCC? - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно написать базовый код asm в GCC, который использует непосредственную константу, определенную в заголовочном файле.Я знаю, как это сделать в расширенной ASM , но как я могу сделать это в базовой ASM, которая не имеет никаких входных и выходных параметров?

1 Ответ

0 голосов
/ 28 ноября 2018

Вы можете использовать макрос препроцессора stringize type C , чтобы преобразовать постоянное значение в строку.Затем вы можете использовать эту строку для создания основного встроенного оператора сборки.Примером может быть:

#define STRINGIZE1(x) #x
#define STRINGIZE(x) STRINGIZE1(x)

#define STACK_ADDR 0x1000

int main()
{
    asm ("movl $" STRINGIZE(STACK_ADDR) ", %esp");

    return 0;
}

В этом примере должна быть сгенерирована эта инструкция по сборке:

movl $0x1000, %esp

Примечание: этот код не предназначен для запуска.

...