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


__asm

Только для систем Microsoft

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

ПримечаниеПримечание

Поддержка Visual C++ для стандартного C++ asm ключевое слово ограничено факту, что компилятор не выдаст ошибку в ключевом слове.Однако asm блок не будет создаваться ни содержательный код.Используйте __asmвместо asm.

Синтаксис:

__asm инструкция по монтажу [; ]

__asm { сборка-инструкци-список } [; ]

Грамматика

  • __asm assembly-instruction ;Opt

    __asm { assembly-instruction-list };Opt

  • сборка-инструкци-список.
    assembly-instruction;Opt

    assembly-instruction;assembly-instruction-list;Opt

Если используется без фигурных скобок, __asm ключевое слово означает, что остальная часть линии оператор языка ассемблера.При использовании с фигурными скобками, это означает, что каждая линия между фигурными скобками оператор языка ассемблера.Для обеспечения совместимости с предыдущими версиями _asm синоним __asm.

с __asm ключевое слово разделитель выписки можно разместить инструкции по монтажу в одну линию.

Перед Visual C++ 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

Все 3 примера, дают одинаковый код, но первый стиль (наиболее узкую __asm блок в фигурных скобках) имеет некоторые преимущества.Код четко отдельные сборки фигурных скобок из кода на c# или C++ и избежать необязательное повторение __asm ключевое слово.Скобки могут также избежать неоднозначности.Если требуется поместить на языке c или C++ выписку на одну линию как __asm блок - блок необходимо заключить в фигурные скобки.Без фигурных скобок компилятор не может определить, когда код сборки останавливается и выписки c или C++ запущено.Наконец, так как текст в фигурных скобках имеет тот же формат, что и обычное текст MASM, можно легко вырезать и вставить текст из существующих исходных файлов MASM.

В отличие от фигурных скобок в c# и C++, наиболее узкую фигурных скобок __asm не влияет на переменную область.Также можно вкладывать __asm блоки; вложение не влияет на переменную область.

ЭЛЕМЕНТ, относящийся Майкрософт

См. также

Ссылки

Ключевые слова C++

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