點(diǎn)擊查看代碼
#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()
{
/************內(nèi)聯(lián)匯編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);
/************內(nèi)聯(lián)匯編交換 a 和 b 的值********************/
int a_ = 5;
int b_ = 15;
// 使用內(nèi)聯(lián)匯編交換 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_);
/************內(nèi)聯(lián)匯編1+2+...+100求和操作*****************/
int counter = 1;
__asm{
mov eax, 0//; 清零 eax 寄存器,用于存儲(chǔ)累加結(jié)果
mov ecx,100//; 將加法的上限存儲(chǔ)在 ecx 寄存器中
loop_start:
add eax, counter//; 將 counter 的值加到 eax 中,累加結(jié)果存儲(chǔ)在 eax 中
inc counter//; 增加 counter
loop loop_start//; 繼續(xù)循環(huán),直到 ecx 變?yōu)?0
mov result, eax
}
printf(formatStr,result);
/************內(nèi)聯(lián)匯編字符數(shù)組打印操作*****************/
char *array_ = "hello world\n";
int len;
__asm{
lea esi,array_
push esi
add esp,4
}
print(array = ,s,array_);
/************內(nèi)聯(lián)匯編結(jié)構(gòu)體操作**********************/
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);
/************內(nèi)聯(lián)匯編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;
}