Встроенный ассемблер (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