a+b
#include <stdio.h>
#include <stdlib.h>
//#include <avr/io.h>
// 使用指定的寄存器实现两个操作数相加
int AddReg(int a, int b);
// 不指定寄存器实现两个整数相加
int Add(int a, int b);
// Main Funciton
int main(void)
{
printf("%d\n", AddReg(10, 15)); // 调用AddReg函数
printf("%d\n", Add(10, 15)); // 调用Add函数
int a = 10, b = 15, sum; // 主函数内部直接潜入汇编代码
__asm__ __volatile__
(
"addl %%ebx, %%eax"
: "=a"(sum)
: "a"(a), "b"(b)
:
);
printf("%d\n", sum);
return EXIT_SUCCESS;
}
// 使用指定的寄存器实现两个操作数相加
int AddReg(int a, int b)
{
__asm__ __volatile__
(
"addl %%ebx, %%eax"
: "=a"(a)
: "b"(b), "a"(a)
// : "%ebx", "%eax"
);
return a;
}
// 不指定寄存器实现两个整数相加
int Add(int a, int b)
{
__asm__ __volatile__
(
//"lock;\n"
"addl %1,%0;\n"
: "=m"(a)
: "r"(b), "m"(a)
:
);
return a;
}
a-b
#include <stdio.h>
#include <stdlib.h>
//#include <avr/io.h>
// 使用指定的寄存器两个参数相减
int SubReg(int a, int b);
// 不指定寄存器实现两个参数相减
int Sub(int a, int b);
int main(void)
{
printf("%d\n", SubReg(100, 10)); // 调用SubReg
printf("%d\n", Sub(100, 10)); // 调用Sub
int a = 100, b = 10, sub;
__asm__ __volatile__
(
"subl %%ebx, %%eax"
: "=a"(sub)
: "b"(b), "a"(a)
// : "%ebx", "%eax"
);
printf("%d\n", sub);
//system("PAUSE");
return 0;
}
// 使用指定的寄存器两个参数相减
int SubReg(int a, int b)
{
__asm__ __volatile__
(
"subl %%ebx, %%eax;"
: "=a"(a)
: "b"(b), "a"(a)
:
);
return a;
}
// 不指定寄存器实现两个参数相减
int Sub(int a, int b)
{
__asm__ __volatile__
(
"subl %1, %0;"
: "=m"(a)
: "r"(b), "m"(a)
:
);
return a;
}