C和汇编混合编程

时间:2022-04-22 18:21:32

汇编中调用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 代表告诉编译器不要对以下的代码进行优化