Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Блок, относящийся только к системам Майкрософт
Ключевое слово __asm вызывает встроенный ассемблер и может отображаться везде, где допустим оператор С или С++. Она не может появиться сама по себе. За ней следует инструкция сборки, группа инструкций, заключенная в фигурные скобки, или, как минимум, пустая пара фигурных скобок. Термин "блок __asm" в этом разделе относится к любой инструкции или группе инструкций, в скобках или без них.
Примечание.
Поддержка MSVC ключевого слова Standard C++ asm ограничена тем фактом, что компилятор не создаст ошибку в ключевом слове. Однако блок asm не создаст никакого значимого кода. Используйте __asm вместо asm.
грамматики
asm-block:
__asm
инструкция assembly-instruction;выбирать
__asm {
assembly-instruction-list};выбирать
assembly-instruction-list:
Выбор инструкции сборки;
Замечания
При использовании без круглых скобок ключевое слово __asm означает, что остальная часть строки — это оператор на языке сборки. При использовании с фигурными скобками оно означает, что каждая строка между скобками — это оператор на языке сборки. Для совместимости с предыдущими версиями является синонимом_asm, __asm если не указан параметр /Za компилятора (отключить расширения языка).
Поскольку ключевое слово __asm является разделителем операторов, можно также помещать инструкции ассемблера на одной строке:
Перед Visual Studio 2005 инструкцией
__asm int 3
Не приводило к созданию машинного кода при компиляции с помощью /clr; компилятор преобразовал инструкцию в инструкцию прерывания среды CLR.
__asm int 3 теперь приводит к созданию машинного кода для функции. Если вы хотите, чтобы функция вызвала точку останова в коде и если вы хотите, чтобы эта функция скомпилирована в MSIL, используйте __debugbreak.
Пример
Следующий фрагмент кода — это простой блок __asm, заключенный в фигурные скобки:
__asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
Кроме того, можно поставить __asm перед каждой инструкцией по сборке:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al
Поскольку ключевое слово __asm является разделителем операторов, можно также помещать инструкции по сборке на одной строке.
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
Все три примера создают один и тот же код, но первый стиль (где блок __asm заключен в фигурные скобки) имеет некоторые преимущества. Фигурные скобки четко отделяют код сборки от кода С или С++ и позволяют избежать лишнего повторения ключевого слова __asm. Скобки также помогают избежать неоднозначности. Если требуется поместить оператор C или C++ на одной строке в виде блока __asm, необходимо заключить блок в фигурные скобки. Без фигурных скобок компилятор не может определить, где останавливается код сборки, а операторы C или C++ начинаются. Наконец, поскольку текст в фигурных скобках имеет тот же формат, что и обычный текст MASM, можно легко вырезать и вставить текст из существующих исходных файлов MASM.
В отличие от фигурных скобок в C и C++ фигурные скобки, в которые заключается блок __asm, не влияют на область видимости переменной. Вы также можете вложить __asm блоки; вложенные блоки не влияют на область переменной.
Завершение блока, относящегося только к системам Майкрософт