C和汇编混合编程

汇编中调用C语言函数

假如c语言中有一个函数 system();
在汇编中调用形式如下 : ldr pc , =system

C中调用汇编语言

假如汇编语言中有
led:
。。。的汇编程序
在c语言中: 先把led声明为全局

.global led 
led();

来调用

C内嵌汇编代码(在没有.s文件时)

内嵌格式

__asm__(
        汇编语句部分
        :输出部分
        :输入部分
        :破坏描述部分
        );

总共分为四个部分,各个部分用 “:”分开,第一部分必须写后面三个可以省略,但是 “:”不能省略
汇编语句部分:汇编语言的集合可以包含多条汇编语句,没条汇编语句之间用换行符“\n”隔开或使用“;”隔开
输出部分:在汇编中被修改的C变量列表
输入部分:作为参数输入到汇编中的变量列表
破坏部分描述:执行汇编指令会破坏的寄存器描述

void write_p15_c1(unsigned long value)
{
    __asm__(
            "mcr p15,0,%0,c1,c0,0\n"//0是数字零
            :
            :"r"(value) //r中的值传到value里
            :"memory"
            );
}
void read_p15_c1(unsigned long value)
{
    __asm__(
            "mrc p15,0,%0,c1,c0,0\n"//0是数字零
            :"=r"(value)//value 的值传到r中
            :
            :"memory"
            );
}
unsigned long old;
unsigned long temp;
__asm__ valatile(
                "mrs %0,cpsr\n"
                "orr %1,%0,#128\n"
                "msr cpsr_c,%a\n"
                :"=r"(old),"=r"(temp)
                :
                :"memory"

volatile 代表告诉编译器不要对以下的代码进行优化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WAF001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值