C和汇编混合编程

来源:互联网 发布:efe 矩阵分析中的权重 编辑:程序博客网 时间:2024/04/19 18:23

汇编中调用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 0