Знак процента (%) во встроенной сборке GNU (asm в C) - PullRequest
1 голос
/ 13 апреля 2019

Что должны делать эти строки кода?

mov ebx, %1

mov ecx, %0

Я знаю, что% означает указатель, но мне нужно больше объяснений.Почему% 1 и 0 - эти конкретные числа?

Ответы [ 2 ]

3 голосов
/ 13 апреля 2019

В синтаксисе 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.

1 голос
/ 13 апреля 2019

% 0 и% 1 - первые два операнда для встроенного блока сборки.Это не обычный x86, а особенный для gcc, я думаю.

Смотрите здесь: http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

...