#include <QCoreApplication>

int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
#if 0//汇编右位移指令shr,左位移指令shl
int a = 40;
int b;
asm ("movl %1, %%eax; \
shl %%eax; \
shl %%eax;\
movl %%eax, %0;"
: "=r" (b)
: "r" (a)
: "%eax");
printf ("a = %d\nb = %d\n", a, b);
system("pause");
#endif

#if 0//异或运算xor
int a = 40;
int b;
asm ("movl %1, %%eax; \
xor %%eax,%%eax; \
movl %%eax, %0;"
: "=r" (b)
: "r" (a)
: "%eax");
printf ("a = %d\nb = %d\n", a, b);
system("pause");
#endif

#if 0//取反运算not
int a = 40;
int b;
asm ("movl %1, %%eax; \
not %%eax; \
movl %%eax, %0;"
: "=r" (b)
: "r" (a)
: "%eax");
printf ("a = %d\nb = %d\n", a, b);
system("pause");
#endif

#if 0//或运算or
int a = 40;
int b;
asm ("movl %1, %%eax; \
or %%eax,%%eax; \
movl %%eax, %0;"
: "=r" (b)
: "r" (a)
: "%eax");
printf ("a = %d\nb = %d\n", a, b);
system("pause");
#endif

#if 0//循环左移ROL,右移ROR
int a = 6;
int b = 0;
asm ("movl %1, %%eax; \
rol %%eax; \
movl %%eax, %0;"
: "=r" (b)
: "r" (a)
: "%eax");
printf ("a = %d\nb = %d\n", a, b);
system("pause");
#endif

#if 0//循环左移ROL,右移ROR
int s1 = 6;
int s2 = 1;
asm ("movl $0x01 , %%eax ; \n\t"
"xorl %%edx , %%edx ;\n\t"
"cpuid ;\n\t"
"movl %%edx ,%0 ;\n\t"
"movl %%eax ,%1 ; \n\t"
:"=m"(s1),"=m"(s2));
printf ("a = %d\nb = %d\n", s1, s);
system("pause");

#endif
#if 1
int a = 6;
int b = 2;
//asm volatile("movl %0,%1" : "=r" (b) : "m" (a));
asm volatile("addl %2,%0":"=r"(a): "r"(a),"r"(b));
printf ("a = %d\nb = %d\n", a, b);
system("pause");

#endif

return app.exec();
}