Share via


__asm

Microsoft 專有的

__asm關鍵字會叫用內嵌組譯工具,而且可以出現在 c 或 C++ 的陳述式是合法的任何地方。 它不可單獨出現。 接下來還必須是組件指示,一群括在括號,或至少,指示對空括號。 詞彙"__asm區塊 「 這裡是指任何指令或是否在大括號中的指示,群。

注意事項注意事項

標準 C++ 的 visual C++ 支援asm關鍵字只限於編譯器將不會產生錯誤 on 關鍵字的事實。不過, asm區塊將不會產生任何有意義的程式碼。Use __asminstead of asm.

語法:

__asm 組件指示 [; ]

__asm { 組件指示清單 } [; ]

文法

  • __asm assembly-instruction ;選擇

    __asm { assembly-instruction-list };選擇

  • 組件指示清單:
    assembly-instruction;選擇

    assembly-instruction;assembly-instruction-list;選擇

如果在大括號,若不使用__asm關鍵字表示線條的其餘部分是組件語言陳述式。 如果與大括號搭配使用,表示在括號之間的每一行都是組件語言陳述式。 與先前的版本相容的_asm是個__asm。

由於__asm關鍵字來陳述式區隔,您可以將組件指示放在同一行。

在 Visual C++ 2005 中,該指令之前

__asm int 3

不會造成原生程式碼,以編譯時被轉換**/clr**。 編譯器會轉譯為 CLR break 指令的指令。

__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封鎖大括號中) 有一些優點。 大括號清楚分開 c 或 C++ 程式碼的組譯程式碼,並避免不必要的重複__asm關鍵字。 大括號也可以避免混淆。 如果您想要在同一行中放置 c 或 C++ 的陳述式__asm區塊中,您必須以大括號括住的區塊。 沒有大括號,編譯器就無法確定組件程式碼會停止,而 c 或 C++ 的陳述式的開始位置。 最後,由於大括弧括住的文字與一般的 MASM 文字相同的格式,您可以輕易地剪下並貼上文字從現有的 MASM 原始程式檔。

不同於 c 和 C++,封入括號中括號__asm區塊並不會影響區域變數的範圍。 也就是說,您可以__asm會封鎖。 巢狀結構並不會影響區域變數的範圍。

結束 Microsoft 特定

請參閱

參考

C + + 關鍵字

內嵌組譯工具