什么是__asm关键字?
__asm 关键字用于调用内联汇编程序,并且可在 C 或 C++ 语句合法时出现。
_asm是 __ASM 的同义词。
ASM是C++中的一个关键字,用于在C++源码中内嵌汇编语言。ASM能写在任何C++合法语句中,asm还不是C的标准关键字,C11标准未加入正文,仅在Annex J中标记为“公共扩展”。但是大多数C实现都将其视为一个关键字。
语法解析
__asm后跟一个程序集指令、一组括在大括号中的指令或者至少一对空大括号。
1、__asm与大括号一起使用,则该关键字表示大括号之间的每一行都是一条汇编语言语句。
如:
_asm { mov al, 2 mov dx, 0xD007 out al, dx }
2、__asm不与大括号一起使用,放在代码行首部,则 __asm 关键字表示此行的其余部分是一条汇编语言语句。
如:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out al, dx
3、__asm做语句分隔符,可将汇编语句放在同一行代码中。
如:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out al, dx
以上三个的例子产生相同的代码,但是第一种风格(把__asm块用括号括起来)有一些优势。括号可以清晰的将C或C++代码和汇编代码分开,并且避免了不必要的重复__asm关键字。括号也能避免模糊性。如果你想在__asm块的同一行放置一个C或C++语句,你必须将块用括号括起来。没有括号,编译器不能区分汇编代码在哪里停止以及C或C++代码在哪里开始。最后,因为在括号的文字有和原始MASM一样的格式,你能轻松的从一个已有的MASM源文件里剪切和黏贴文字到文件来。