VS2010 C语言内嵌汇编语言程序
2021年7月28日·席锦
在visual studio 2010中C语言使用内联汇编写代码 ,它的格式有两种,
一种是__asm 直接接汇编指令语句,比如:__asm int 3 // 软件中断
另一种是加上花括号,类似于一个函数,比如
__asm
{
mov eax, 1 ;1到eax
mov ebx, 2 ;2到ebx
add eax, ebx ;eax 和ebx相加,含义为:eax+=ebx
}
使用内联汇编有个好处可以直接使用C/C++中的变量 ,比如
int a;
__asm mov a, 2 // 可以使用变量,只有一条,含义为:给变量a赋值为2
另外使用内联汇编最需要注意的是数组。比如:int b[2] = {1,2} ;
不可以直接
__asm
{
mov b[0], 1
mov b[1], 2
}
这样是错误的, 需要
__asm
{
mov b[0], 1
mov b[4], 2
}
为什么是4呢?因为内联汇编转换后是数组a的地址偏移,而不是序号。
下述是在VS2010中编译通过的示例代码
- #include
-
- int main()
- {
- printf("Hello, World!\n");
-
- __asm int 3 // 软件中断
-
- int a;
- __asm mov a, 2 // 可以使用变量,只有一条,含义为:给变量a赋值为2
-
- printf("a=%d\n", a);
-
- // 需要在调试模式(F5)中查看下述eax、ebx的值
- __asm
- {
- mov eax, 1 ;1到eax
- mov ebx, 2 ;2到ebx
- add eax, ebx ;eax 和ebx相加,含义为:eax+=ebx
- }
-
- int b[2] = {0, 1};
- __asm
- {
- mov b[0], 1
- mov b[4], 2
- }
-
- printf("bye, World!\n");
- return 0;
- }
运行截图(F5进入调试模式可查看上文中叙述的变量值):