Microsoft 专用
内联程序集的便利是能够按名称引用 C 或 C++ 变量。__asm 块可以引用任何符号,包括变量名,范围内块显示。例如, C,如果变量的 var 处于范围中,命令
__asm mov eax, var
在 EAX 存储 var 的值。
如果类、结构或联合成员有一个唯一的名称,仅使用成员名称, __asm 块可以引用它,,无需指定变量或 typedef 名称在句点 (.) 运算符之前。,但是,如果成员名称不是唯一的必须将一个变量或 typedef 名称期间运算符之前。例如,结构输入以下示例共享 same_name 作为其成员名称:。
如果声明类型的变量
struct first_type hal;
struct second_type oat;
所有对 same_name 必须使用变量名称的成员,因为 same_name 不是唯一的。,但该成员 weasel 有一个唯一的名称,使用它的成员名称,因此,您可以引用它:
// InlineAssembler_Accessing_C_asm_Blocks.cpp
// processor: x86
#include <stdio.h>
struct first_type
{
char *weasel;
int same_name;
};
struct second_type
{
int wonton;
long same_name;
};
int main()
{
struct first_type hal;
struct second_type oat;
__asm
{
lea ebx, hal
mov ecx, [ebx]hal.same_name ; Must use 'hal'
mov esi, [ebx].weasel ; Can omit 'hal'
}
return 0;
}
请注意省略变量名的,仅仅是代码的便利。同一程序集指令生成变量名是否存在。
可以访问 C++ 的数据成员不考虑访问限制。但是,不能调用成员函数。
特定于 Microsoft 的结尾