a+b
[cpp] view plain copy print?
- #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;
- }
#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
[cpp] view plain copy print?
- #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;
- }
转载:http://blog.csdn.net/gatieme/article/details/44653067
时间: 2025-01-21 07:24:25