#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();
}
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
d中内联汇编示例
d中内联汇编示例
d 内联 汇编 编译器 寄存器 -
linux反汇编简单示例
的格式。
linux 运维 服务器 反汇编 文件名 -
objdump反汇编用法示例
objdump反汇编,反汇编与源代码混合显示,C++符号逆向解析。
objdump 反汇编 代码段 c++