<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 混合使用C、C++和匯編語(yǔ)之:內(nèi)聯(lián)匯編和嵌入型匯編的使用

          混合使用C、C++和匯編語(yǔ)之:內(nèi)聯(lián)匯編和嵌入型匯編的使用

          作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/257034.htm

          可以顯示地使用、THUMB和ODE16偽操作改變嵌入式匯編的執(zhí)行狀態(tài)。關(guān)于偽操作的詳細(xì)信息請(qǐng)參加指令偽操作一節(jié)。如果使用的處理器支持Thumb-2指令,則可以在Thumb狀態(tài)下,在嵌入式匯編中使用Thumb-2指令。

          參數(shù)名允許用在參數(shù)列表中,但不能用在嵌入式匯編函數(shù)體內(nèi)。例如,以下函數(shù)在函數(shù)體內(nèi)使用整數(shù)i,但在匯編中無(wú)效:

          __asmintf(inti){

          ADDi,i,#1//編譯器報(bào)錯(cuò)

          }

          可以使用r0代替i。

          下面通過(guò)嵌入式匯編的例子,來(lái)進(jìn)一步熟悉嵌入式匯編的使用。

          下面的例子實(shí)現(xiàn)了字符串的拷貝,注意和上一節(jié)中中字符串拷貝的例子相比較,分析其中的區(qū)別。

          #includestdio.h>

          __asmvoidmy_strcpy(constchar*src,constchar*dst){

          loop

          LDRBr3,[r0],#1

          STRBr3,[r1],#1

          MPr3,#0

          BNEloop

          MOVpc,lr

          }

          voidmain()

          {

          constchar*a=Helloworld!;

          charb[20];

          my_strcpy(a,b);

          printf(Originalstring:'%s'n,a);

          printf(opiedstring:'%s'n,b);

          }

          2.嵌入式的使用限制

          嵌入式匯編的使用有下面一些限制。

          ①在預(yù)處理之后,__asm函數(shù)只能包含匯編代碼,但以下標(biāo)識(shí)符除外:

          ·__cpp(expr);

          ·__offsetof_base(D,B);

          ·__mcall_is_virtual(D,f);

          ·__mcall_is_in_vbase(D,f);

          ·__mcall_this_offset(D,f);

          ·__vcall_offsetof_vfunc(D,f);

          ②編譯程序不為_(kāi)_asm函數(shù)生成返回指令。如果要從__asm函數(shù)返回,必須將用匯編代碼編寫(xiě)的返回指令包含到函數(shù)體內(nèi)。由于嵌入式匯編執(zhí)行__asm函數(shù)的順序是在編譯時(shí)定義好的,所有從一個(gè)內(nèi)嵌匯編跳轉(zhuǎn)到一個(gè)內(nèi)嵌匯編程序是運(yùn)行的,但在中卻不能實(shí)現(xiàn)。

          ③__asm函數(shù)調(diào)用遵循AAPCS規(guī)則。所以,即使在__asm函數(shù)體內(nèi)可用的匯編代碼(例如,更改狀態(tài)),在__asm函數(shù)和普通C或函數(shù)相互調(diào)用時(shí),未必可用,因?yàn)榇苏{(diào)用也必須遵循AAPCS規(guī)則。

          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


          c++相關(guān)文章:c++教程




          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();