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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > C51與匯編語言混合編程之一

          C51與匯編語言混合編程之一

          作者: 時間:2016-11-09 來源:網(wǎng)絡 收藏
          1、函數(shù)內(nèi)部混合編程

          若想在C語言函數(shù)內(nèi)部使用匯編語言,應使用以下Cx51編譯器控制命令:

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

          #pragma asm

          ;;;Assembly code

          #pragma endasm

          功能作用:

          asm和endasm命令用于將其標記的匯編程序合并到.SRC文件中。這個帶有asm和endasm塊標記的源程序可看作是在線嵌入式匯編程序。從這點來說,此命令有些類似于#define命令。

          具體實現(xiàn):

          (1)編譯器設置及SRC文件的產(chǎn)生

          .SRC文件在命令行編譯模式下是使用SRC編譯器控制命令產(chǎn)生的,在IDE環(huán)境中可以為需要產(chǎn)生SRC文件的C源文件設置特定選項:

          l 右鍵單擊Project Workspace下的文件標簽

          l 選擇Options for file … 項,打開Options – Properties 頁。

          l 選中Generate Assembler SRC file 項

          l 選中Assembler SRC file項

          (2)添加庫文件

          根據(jù)選擇的編譯模式,把相應的庫文件添加到工程下面,如在”small”模式下,需將”keilc51libc51s.lib”文件加入工程中。在Keil安裝目錄下的C51LIB 目錄的LIB 文件如下:

          C51S.LIB - 沒有浮點運算的 Small model
          C51C.LIB - 沒有浮點運算的 Compact model
          C51L.LIB - 沒有浮點運算的 Large model
          C51FPS.LIB - 帶浮點運算的 Small model
          C51FPC.LIB - 帶浮點運算的 Compact model
          C51FPL.LIB - 帶浮點運算的 Large model

          若未添加此庫文件,則會提示” UNRESOLVED EXTERNAL SYMBOL ”警告。

          如上設置后,編譯,IDE會生成匯編源文件(.SRC)并由匯編器將此文件轉化成目標文件(.OBJ)。

          注意事項:

          (1) 此時在匯編語言中雖可以加標簽,以執(zhí)行一些跳轉類指令,但要注意不要與編譯器產(chǎn)生的其他標簽相同。

          (2) 在遵循了Cx51參數(shù)的調(diào)用規(guī)則后,如在向該函數(shù)傳遞一char數(shù)時,編譯器會將其編譯成通過R7傳遞,此時在匯編語言若直接調(diào)用R7,會出現(xiàn)定義的變量(形參)未調(diào)用警告。

          2、函數(shù)外部混合編程

          具體實現(xiàn):

          若要將一完整的函數(shù)編寫為匯編語言,并可被其它函數(shù)調(diào)用,此時可以遵循如下過程:

          (1) 源文件的建立

          新建一C源文件如test.c,將其加入工程中,并寫出要實現(xiàn)函數(shù)的的啞函數(shù)(即寫出函數(shù)名及形參,不用給出具體實現(xiàn),但最好寫出簡單調(diào)用形參的代碼,使編譯器不提示 ”定義的變量未被調(diào)用”的警告)。

          (2) 從上”具體過程”之(1)。

          (3) 從上”具體過程”之(2)。

          (4) 編譯文件,將test.c 從工程中移除,將生成的test.src文件改名,如test.a51。

          (5) 將test.a51加入工程, 并在其內(nèi)部書寫具體要實現(xiàn)的匯編代碼。

          (6) 重新編譯整體文件即可。

          注意事項:

          (1) 調(diào)用前一定要在所調(diào)用的文件內(nèi)部聲明該函數(shù)的存在,寫法應同匯編語言的C函數(shù)實現(xiàn)一樣,即test.c 中的函數(shù)名稱。



          評論


          技術專區(qū)

          關閉
          看屁屁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); })();