В синтаксисе AT & T регистры ссылаются на использование знака процента, а затем имени регистра, то есть %eax
.Однако те, которые вы показали цифрами, не имеют значения в сборке, они используются во встроенной сборке для ссылки на операнды ввода и вывода.
int i = 5;
int j;
asm ("mov %1, %0" : "=r"(j) : "r"(i)); //AT&T. Swap operands for Intel syntax
Это объявит i
и j
как выходные данные ивходные аргументы соответственно.q
означает, что любой регистр общего назначения в порядке.Если вам не нужен конкретный регистр, вы всегда должны позволять вашему компилятору выбирать все, что удобно.Поскольку вы заранее не знаете, какие регистры вы получаете, им присваивается номер, начинающийся с 0. %0
- это первый аргумент, в этом случае выходной аргумент j
и %1
- входной аргумент, i
.