点击查看代码
#include <stdio.h>
#include <windows.h>
struct MyStruct{
int a;
char b;
float c;
};
#define print(str,format,val) printf(""#str"%"#format"\n",(val))
int main()
{
/************内联汇编a 和 b 的相加的值********************/
char* formatStr = "reslut = %d\n";
int result;
int a = 5;
int b = 4;
__asm{
mov eax,a
add eax,b
mov result,eax
}
printf(formatStr,result);
/************内联汇编交换 a 和 b 的值********************/
int a_ = 5;
int b_ = 15;
// 使用内联汇编交换 a 和 b 的值
__asm {
mov eax, a_ // 将 a 的值放入 eax
xchg eax,b_ // 使用 xchg 交换 eax 和 b 的值
mov a_, eax // 将 eax 的值存回 a
}
printf("After swapping: a = %d, b = %d\n", a_, b_);
/************内联汇编1+2+...+100求和操作*****************/
int counter = 1;
__asm{
mov eax, 0//; 清零 eax 寄存器,用于存储累加结果
mov ecx,100//; 将加法的上限存储在 ecx 寄存器中
loop_start:
add eax, counter//; 将 counter 的值加到 eax 中,累加结果存储在 eax 中
inc counter//; 增加 counter
loop loop_start//; 继续循环,直到 ecx 变为 0
mov result, eax
}
printf(formatStr,result);
/************内联汇编字符数组打印操作*****************/
char *array_ = "hello world\n";
int len;
__asm{
lea esi,array_
push esi
add esp,4
}
print(array = ,s,array_);
/************内联汇编结构体操作**********************/
struct MyStruct myVar;
__asm{
mov eax,myVar.a
mov byte ptr myVar.b, 'X'
movss xmm0,myVar.c
}
print(a = ,d,myVar.a);
print(b = , c, myVar.b);
print(c = , f, myVar.c);
/************内联汇编MessageBox弹窗********************/
char *title = "I LOVE C/C++!";
char *flag = "Game Over!";
__asm {
push 0
push title
push flag
push 0
call byte ptr[MessageBoxA]
}
return 0;
}