195-C/C++中的__asm关键字

什么是__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源文件里剪切和黏贴文字到文件来。

上一篇:WebAssembly完全入门——了解wasm的前世今身


下一篇:linux 系统中使用udev固定oracle asm磁盘名称、权限方式