1 汇编实现简单的四则运算
1.1 加法
int a = 30; int b = 20; int c ;
// c = a + b; asm ( "mov %1, %0\n\t" // mov 操作数写入寄存器 "add %2, %0" // add 加法,%0 = %0 + %2 : "=r" (c) // = 表示c是out参数 : "r" (a), "r" (b) // r 表示变量从寄存器读取 ); printf("30 + 20 = %d\n", c); // 输出:30 + 20 = 50
1.2 减法
int a = 30; int b = 20; int d ;
// d = a - b; asm ( "mov %1, %0\n\t" "sub %2, %0" // sub 减法,%0 = %0 - %2 : "=r" (d) : "r" (a), "r" (b) ); printf("30 - 20 = %d\n", d); // 输出: 30 - 20 = 10
1.3 乘法
int a = 30; int b = 20; int e ;
// e = a * b; asm ( "movl %1, %%eax\n\t" "imull %2\n\t" // imul/mul 有符号/无符号乘法 %eax = %eax * %2 "mov %%eax, %0" : "=m" (e) // m 表示输出到内存 : "m" (a), "m" (b) // m 表示从内存读取 ); printf("30 * 20 = %d\n", e); // 输出: 30 * 20 = 600
1.4 除法
int a = 30; int b = 20; int f ;
// f = a / b; asm ( "movl %1, %%eax\n\t" "movl $2, %%ecx\n\t" "divl %%ecx\n\t" // eax = eax / ecx "movl %%eax, %0" : "=m" (f) : "m" (a), "m" (b) ); printf("30 / 20 = %d\n", f); // 输出: 30 / 20 = 1
1.5 递增(+1)
int a = 30;
// a = a + 1; asm ( "inc %0" // inc %0 = %0 + 1 : "+r" (a) // + a是in/out参数 ); printf("30 + 1 = %d\n", 31); // 输出: 30 + 1 = 31
1.5 递减(-1)
int b = 20;
// a = a + 1; asm ( "dec %0" // dec %0 = %0 - 1 : "+r" (a) // + a是in/out参数 ); printf("20 - 1 = %d\n", 19); // 输出: 20 - 1 = 19