×
单片机 > 单片机程序设计 > 详情

ARM程序编写笔记

发布时间:2020-06-02 发布时间:
|

#include"stdio.h"
#include"limits.h"
#include"time.h" 
#include
#include"math.h"
#include
#include"rt_misc.h"
#include
#include

在C语言中嵌入汇编程序,用__asm,asm前是两个下滑杠,汇编语言在其后的大括号实体中写出,例如:在C语言中定义一个整型f函数,自变量为整型x,则可按下列规格编写
                      int f(int x)
                          {
                               int r0;
                                __asm
                                    {
                                         ADD r0,x,1
                                 EOR x,r0,x
                                     }
                                 return x;
                             } 
函数名后加 __pure:为了通知编译器这是一个纯函数,在申明时需要将该函数定义为 __pure 。
                       int f(int x)__pure 
                          {
                               int r0;
                                __asm
                                    {
                                         ADD r0,x,1
                                 EOR x,r0,x
                                     }
                                 return x;
                             } 
////////////////////////////////////////////////////////////////////////////
Thumb状态编译C或C++时,内联汇编程序不编译,且自动切换到ARM状态,如果要在Thumb状态内编译汇编指令到代码中,需要将含有汇编指令的函数包含在
#pragma arm  和#pragma thumb之间。   
#pragma arm
   int add(int i,int j)
   {
     int res;
__asm
{
   ADD res,i,j
}
return res;
   } 
#pragma thumb 
需要注意的是,内连汇编不支持以下汇编指令
svc,
LDR Rn  ,  =expression伪指令,可用MOV Rn, expression代替
LDRT,LDRBT, STRT  ,STRBT
MUL,MLA,UMULL,SMULL,SMLAL
MOV 或MVN标志设定指令(当第二操作数为常数)
用户模式LDM指令
ADR和ADRL伪指令
====================================
嵌入C程序中的汇编函数如果想访问C中的常量表达式,可用__cpp关键字。例如
   mov   r0,#__cpp(expr)
例如  mov   r0,#__cpp(res)
         LDR  r1,=__cpp(res)
         BL  __cpp(res)

关键字:ARM  程序编写  汇编程序

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单