來源:http://msdn.microsoft.com/zh-cn/library/45yd4tzz.aspxapp
Microsoft 專用less
__asm 關鍵字調用一個內聯彙編,而且能夠顯示,每當 c. 或 C++ 語句合法。 它不能單獨出現。 必須由程序集指令執行它,請在大括號中的命令的一組,或者,至少, null 對大括號。 該術語 「__asm 塊是」此處稱爲命令的說明或組,在大括號。函數
說明 |
---|
Visual C++ 對標準 C++ asm 關鍵字支持僅限於該條件編譯器在關鍵字不會生成錯誤。 可是, asm 塊不會生成任何有意義的代碼。 使用 __asm而不是 asm。ui |
語法: spa
__asm 程序集命令 [;] debug
__asm {} 程序集指令列表 [;] 3d
若是使用,而不用大括號, __asm 關鍵字表示此行的其他部分是一個彙編語言的語句。 若是使用與大括號,這意味着在大括號之間的每一行都是一個彙編語言的語句。 對於與之前版本的兼容, _asm 是 __asm的同義詞。
由於 __asm 關鍵字是語句分隔符,則在同一行中放置程序集指令。
在 Visual C++ 2005 版以前,命令
__asm int 3
沒有致使本機代碼,便會產生編譯 /clr;編譯器將該命令對 CLR 中斷命令。
__asm int 3 如今致使該函數的本機代碼生成。 若是但願功能生成斷點在代碼中,而且,若是您但願函數編譯爲 MSIL,使用 __debugbreak。
__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 關鍵字沒必要要的重複。 大括號也會阻止多義性。 若是在同一 __asm 塊的行要將 c. 或 C++ 語句,能夠在大括號必須將塊。 不帶大括號,編譯器沒法告訴程序集代碼位置中止,而且 C 或 C++ 語句開始。 最後,由於,在大括號的文本與普通 MASM 文本的格式,您能夠輕鬆地剪切和粘貼文本從現有 MASM 源文件。
不一樣於 C 和 C++ 的大括號,將 __asm 的大括號塊不會影響變量的範圍。 您也能夠嵌套 __asm 塊;嵌套不影響變量的範圍。
特定於 Microsoft 的結尾