gcc内敛汇编实现----加-减

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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值