__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 的结尾

本站公众号
   欢迎关注本站公众号,获取更多信息