9.3.2. Выходные операнды

We use cookies. Read the Privacy and Cookie Policy

9.3.2. Выходные операнды

Во второй секции указаны выходные операнды инструкции. Каждому операнду соответствует строка адресации и выражение языка С, записанное в скобках. В случае выходных операндов (все они должны быть левосторонними значениями) строка адресации должна начинаться со знака равенства. Компилятор проверяет, действительно ли каждый выходной операнд является левосторонним значением (т.е может стоять в левой части оператора присваивания).

Список обозначений регистров для конкретной архитектуры можно найти в исходных текстах компилятора gcc (конкретнее — в определении макроса REG_CLASS_FROM_LETTER). Например, в файле gcc/config/i386/i386.h содержатся обозначения, соответствующие архитектуре x86 (табл. 9.1).

Таблица 9.1. Обозначения регистров в архитектуре Intel x86

Символ регистра Регистры, которые могут использоваться компилятором gcc R Регистры общего назначения (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP) q Общие регистры хранения данных (EAX, ЕВХ, ECX, EDX) f Регистр для чисел с плавающей запятой t Верхний стековый регистр для чисел с плавающей запятой u Второй после верхнего стековый регистр для чисел с плавающей запятой a Регистр EAX b Регистр EBX с Регистр ECX d Регистр EDX x Регистр SSE (регистр потокового расширения SIMD) y Мультимедийные регистры MMX A Восьмибайтовое значение, формируемое из регистров EAX и EDX D Указатель приемной строки в строковых операциях (EDI) S Указатель исходной строки в строковых операциях (ESI)

Если есть несколько однотипных операндов, то они разделяются запятыми, как показано в секции входных операндов. Всего можно задавать до десяти операндов, адресуемых как %0, %1, … %9. Если выходные операнды отсутствуют, но есть входные операнды или модифицируемые регистры, то вторую секцию следует оставить пустой или пометить ее комментарием наподобие /* нет выходных данных */.