内联汇编

点击查看代码
#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;
}
posted @ 2023-09-18 22:35  huh&uh  阅读(39)  评论(0)    收藏  举报