找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3443|回复: 0
打印 上一主题 下一主题
收起左侧

ARM程序编写笔记

[复制链接]
跳转到指定楼层
楼主
ID:262 发表于 2014-6-16 23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"stdio.h"
#include"limits.h"
#include"time.h"
#include<stdlib.h>
#include"math.h"
#include<ctype.h>
#include"rt_misc.h"
#include<setjmp.h>
#include<cstddef>

在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)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表