找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4017|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

ARM程序編寫筆記

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:262 發(fā)表于 2014-6-16 23:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#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語言中嵌入?yún)R編程序,用__asm,asm前是兩個(gè)下滑杠,匯編語言在其后的大括號(hào)實(shí)體中寫出,例如:在C語言中定義一個(gè)整型f函數(shù),自變量為整型x,則可按下列規(guī)格編寫

                      int f(int x)
                          {
                               int r0;
                                __asm
                                    {
                                         ADD r0,x,1
                                 EOR x,r0,x
                                     }
                                 return x;
                             }
函數(shù)名后加 __pure:為了通知編譯器這是一個(gè)純函數(shù),在申明時(shí)需要將該函數(shù)定義為 __pure 。
                       int f(int x)__pure
                          {
                               int r0;
                                __asm
                                    {
                                         ADD r0,x,1
                                 EOR x,r0,x
                                     }
                                 return x;
                             }
////////////////////////////////////////////////////////////////////////////
Thumb狀態(tài)編譯C或C++時(shí),內(nèi)聯(lián)匯編程序不編譯,且自動(dòng)切換到ARM狀態(tài),如果要在Thumb狀態(tài)內(nèi)編譯匯編指令到代碼中,需要將含有匯編指令的函數(shù)包含在
#pragma arm  和#pragma thumb之間。   
#pragma arm
   int add(int i,int j)
   {
     int res;
__asm
{
   ADD res,i,j
}
return res;
   }
#pragma thumb
需要注意的是,內(nèi)連匯編不支持以下匯編指令
svc,
LDR Rn  ,  =expression偽指令,可用MOV Rn, expression代替
LDRT,LDRBT, STRT  ,STRBT
MUL,MLA,UMULL,SMULL,SMLAL
MOV 或MVN標(biāo)志設(shè)定指令(當(dāng)?shù)诙僮鲾?shù)為常數(shù))
用戶模式LDM指令
ADR和ADRL偽指令
====================================
嵌入C程序中的匯編函數(shù)如果想訪問C中的常量表達(dá)式,可用__cpp關(guān)鍵字。例如
   mov   r0,#__cpp(expr)
例如  mov   r0,#__cpp(res)
         LDR  r1,=__cpp(res)
         BL  __cpp(res)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表