__asm

來源:http://msdn.microsoft.com/zh-cn/library/45yd4tzz.aspxapp

Microsoft 專用less

__asm 關鍵字調用一個內聯彙編,而且能夠顯示,每當 c. 或 C++ 語句合法。 它不能單獨出現。 必須由程序集指令執行它,請在大括號中的命令的一組,或者,至少, null 對大括號。 該術語 「__asm 塊是」此處稱爲命令的說明或組,在大括號。函數

說明 說明

Visual C++ 對標準 C++ asm 關鍵字支持僅限於該條件編譯器在關鍵字不會生成錯誤。 可是, asm 塊不會生成任何有意義的代碼。 使用 __asm而不是 asmui

語法: spa

__asm 程序集命令 [;] debug

__asm {} 程序集指令列表 [;] 3d

__asm assembly-instruction ; opt rest

__asm { assembly-instruction-list }; opt code

程序集指令列表:

assembly-instruction ; opt orm

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

全部三個示例生成相同的代碼,不過,第一個樣式 (將 __asm 塊括在大括號中) 有一些優勢。 從 C 或 C++ 代碼的大括號明顯不一樣的代碼和避免 __asm 關鍵字沒必要要的重複。 大括號也會阻止多義性。 若是在同一 __asm 塊的行要將 c. 或 C++ 語句,能夠在大括號必須將塊。 不帶大括號,編譯器沒法告訴程序集代碼位置中止,而且 C 或 C++ 語句開始。 最後,由於,在大括號的文本與普通 MASM 文本的格式,您能夠輕鬆地剪切和粘貼文本從現有 MASM 源文件。

不一樣於 C 和 C++ 的大括號,將 __asm 的大括號塊不會影響變量的範圍。 您也能夠嵌套 __asm 塊;嵌套不影響變量的範圍。

特定於 Microsoft 的結尾

本站公眾號
   歡迎關注本站公眾號,獲取更多信息