__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 特定