Поделиться через


Встроенный ассемблер (C)

Блок, относящийся только к системам Microsoft

Встроенный ассемблер позволяет внедрять инструкции языка ассемблера непосредственно в исходные программы С без дополнительных шагов по сборке и компоновке. Встроенный код на ассемблере встроен в компилятор, поэтому вам не требуется отдельный сборщик для языка ассемблера, такой как Microsoft Macro Assembler (MASM).

Так как встроенный ассемблер не требует отдельных действий по сборке и компоновке, он является более удобным, чем отдельный ассемблер. Во встроенном коде на языке ассемблера можно использовать любое имя переменной или функции языка C, находящееся в области видимости, поэтому его легко интегрировать с кодом C программы. Поскольку в коде на языке ассемблера можно одновременно использовать операторы C, с его помощью можно выполнять задачи, которые слишком сложно или невозможно выполнить только в C.

Ключевое слово __asm вызывает встроенный ассемблер и может использоваться в любом месте, в котором может использоваться оператор С. Он не может отображаться самостоятельно. За ним должна следовать инструкция по сборке, группа инструкций, заключенная в круглые скобки, либо, в крайнем случае, пустая пара круглых скобок. Термин "блок __asm" в этом разделе относится к любой инструкции или группе инструкций, в скобках или без них.

Следующий код — это простой блок __asm, заключенный в фигурные скобки. (Этот код является последовательностью пролога пользовательской функции.)

__asm
{
   push ebp
   mov  ebp, esp
   sub  esp, __LOCAL_SIZE
}

Кроме того, можно поставить __asm перед каждой инструкцией по сборке.

__asm push ebp
__asm mov  ebp, esp
__asm sub  esp, __LOCAL_SIZE

Поскольку ключевое слово __asm является разделителем операторов, можно также помещать инструкции ассемблера на одной строке.

__asm push ebp   __asm mov  ebp, esp   __asm sub  esp, __LOCAL_SIZE 

Завершение блока, относящегося только к системам Microsoft

См. также

Основные понятия

Атрибуты функций