C语言内嵌汇编(arm-v7)----加减乘移位

时间:2021-10-26 04:02:19

在现代嵌入式操作系统中,汇编语言当然必不可少,汇编语言的优势就是执行速度快。如果在C语言的代码中,在关键的地方内嵌汇编,那么效率将会大大的提高,我们来看看代码:

#include <stdio.h>

int main(void)
{
	int a = 10 ; 
	int b = 20 ; 
	
	int addsum ; 
	int subsum ; 
//	int mulsum ;

	__asm__ __volatile__ (
	
	//传参
	"mov	r0 , %2   \n"    //mov 执行是将第二个操作数移到第一个操作数上    
	"mov	r1 , %3   \n"
	
	//运算
	"mul	r2 , r1 , r0   \n"   //将r1*r0的值赋值给寄存器r2
//	"add	r2 , r1 , r0   \n"   //将r1+r0的值赋值给寄存器r2
	"sub	r3 , r1 , r0   \n"   //<span style="font-family: Arial, Helvetica, sans-serif;">将r1-r0的值赋值给寄存器r2</span>


	//传参数
	"mov	%0 , r2   \n"
	"mov	%1 , r3   \n"
	
	//在汇编的代码中,没有除法,除法是一个协处理器的函数
	
	//参数是从上到下,从左到右以零开始自增   %0  %1  %2
	:"=r"(addsum),"=r"(subsum)
	:"r"(a),"r"(b)
	:"r0","r1","r2","r3"
	);

	printf("a : %d  b :%d  addsum:%d  subsum:%d \n" , a , b , addsum , subsum );
	return 0 ; 
}
运行结果:

我的运行结果是用了我个人板子上的文件系统来运行的,对于文件系统的搭建,往后会有文章说明

编译器用的是arm-linux-gcc

C语言内嵌汇编(arm-v7)----加减乘移位