0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何寫要被C調用的匯編函數(shù)

麥辣雞腿堡 ? 來源:Microchip微芯 ? 作者:Microchip微芯 ? 2023-01-22 14:54 ? 次閱讀

問:我該怎么寫一個將被C調用的匯編函數(shù)?

答:一個最簡單的學習怎么寫匯編的方式是,先用C寫這個代碼的簡單版本,然后用編譯器將它編譯成為匯編代碼。然后你就可以用這個輸出的匯編代碼作為你自己匯編函數(shù)的模板。例如:

你說你想寫一個帶有“l(fā)ong”類型參數(shù)的匯編子程序,那么首先用C寫一個函數(shù):

void MyAsmFunc(unsigned long parameter)
{
}

好了,現(xiàn)在編譯它產生匯編代碼。PICC編譯器的-S選項可以。

picc -16f877 -S file.c

這個命令將產生"file.as",打開它,它看起來像下面這樣:


; param _parameter assigned to ?_MyAsmFunc+0
_MyAsmFunc$parameter set ?_MyAsmFunc+0
psect text1,local,class=CODE,delta=2
global _MyAsmFunc
signat _MyAsmFunc,4216
psect text1
_MyAsmFunc
bcf 3,6
bcf 3,5
return


因為PICC編譯器會讓函數(shù)的bank回零。所以我們在這里看到它在return之前把bank回到bank0。從這個匯編代碼開始,你可以擴充你的匯編代碼。函數(shù)的參數(shù)可以使用_MyAsmFunc$paramter符號來訪問。這個符號訪問的是第一個字節(jié),其余的字節(jié)就在符號上加偏移量,例如:

_MyAsmFunc$parameter+2

這將引用第三個字節(jié)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關注

    關注

    3

    文章

    4340

    瀏覽量

    62791
  • 編譯器
    +關注

    關注

    1

    文章

    1637

    瀏覽量

    49188
收藏 人收藏

    評論

    相關推薦

    匯編C語言中的定義和調用

    單片機開發(fā)或多或少都會接觸一些匯編代碼,今天就來說說關于匯編C中的定義和調用,以及舉例說明嵌套匯編代碼。
    發(fā)表于 08-29 14:07 ?1453次閱讀

    匯編語言模塊調用C++函數(shù)實例

    現(xiàn)在編寫一個簡單的應用程序,提示用戶輸入整數(shù),通過移位的方式將其與 2 的幕 (21?2?) 相乘,并用填充前導空格的形式再次顯示每個乘積。輸入-輸出使用 C++。匯編模塊將調用 3 個 C
    發(fā)表于 10-11 09:52 ?950次閱讀

    C函數(shù)調用機制與棧幀原理詳解

    當一個C函數(shù)調用時,函數(shù)的參數(shù)如何傳遞、堆棧指針如何變化、棧幀是如何被建立以及如何被消除的,一直缺乏系統(tǒng)性的理解,因此決定花時間學習下函數(shù)
    發(fā)表于 06-08 10:49 ?1395次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>函數(shù)</b><b class='flag-5'>調用</b>機制與棧幀原理詳解

    如何使用內聯(lián)函數(shù)調用匯編函數(shù)

    C/C++中調用匯編代碼中的函數(shù)使用內聯(lián)函數(shù)調用匯編函數(shù)
    發(fā)表于 04-02 06:57

    C匯編是怎樣進行函數(shù)調用的?

    C匯編是怎樣進行函數(shù)調用的?分為哪幾種情況?
    發(fā)表于 04-27 07:00

    如何寫一個簡易的printf函數(shù)?

    如何寫一個簡易的printf函數(shù)?
    發(fā)表于 04-28 06:47

    匯編調用C1、用c編寫函數(shù)

    匯編調用C1、用c編寫函數(shù) int jc(int n),其功能是返回n!,保存為1c.c,編寫
    發(fā)表于 12-20 07:59

    C++教程之函數(shù)的遞歸調用

    C++教程之函數(shù)的遞歸調用 在執(zhí)行函數(shù) f 的過程中,又要調用 f 函數(shù)本身,稱為
    發(fā)表于 05-15 18:00 ?35次下載

    如何在c51程序中調用匯編函數(shù)

    一個整型變量。例中,先用c51寫出這個函數(shù)的主體,然后用SRC控制指令編譯產生asm文件,進一步修改這個asm文件就得到我們所要的匯編函數(shù)。該方法讓編譯器自動完成各種段的安排,提高了
    發(fā)表于 11-02 15:57 ?4255次閱讀

    Linux匯編C互相調用

    ? 一. 概述  匯編通過call指令調用C函數(shù),call指令主要有兩個功能:1.將下一條指令的地址保存在棧頂;2.設置eip指向被
    發(fā)表于 04-02 14:46 ?430次閱讀

    C匯編如何互相調用

    一、gcc 內聯(lián)匯編 內聯(lián)匯編即在C中直接使用匯編語句進行編程,使程序可以在C程序中實現(xiàn)C語言不
    的頭像 發(fā)表于 12-25 15:50 ?3026次閱讀

    EE-128:C++中的DSP:從C++調用匯編類成員函數(shù)

    EE-128:C++中的DSP:從C++調用匯編類成員函數(shù)
    發(fā)表于 04-16 17:04 ?2次下載
    EE-128:<b class='flag-5'>C</b>++中的DSP:從<b class='flag-5'>C</b>++<b class='flag-5'>調用匯編</b>類成員<b class='flag-5'>函數(shù)</b>

    C語言代碼中調用匯編函數(shù)需要注意什么

    來看下混合語言工程中,就比如在匯編程序中調用C函數(shù),或者在C語言代碼中調用匯編
    的頭像 發(fā)表于 11-12 11:04 ?2855次閱讀

    匯編調用C函數(shù)

    大多數(shù)情況下,可能只需要一到兩個簡單的匯編函數(shù),所以就想將這些匯編代碼嵌入C代碼的文件中。多數(shù)開發(fā)工具都有一種被稱作內聯(lián)匯編的特性,而ARM
    發(fā)表于 08-05 10:07 ?4624次閱讀

    EE-128:C語言中的DSP:從C調用匯編類成員函數(shù)

    電子發(fā)燒友網(wǎng)站提供《EE-128:C語言中的DSP:從C調用匯編類成員函數(shù).pdf》資料免費下載
    發(fā)表于 01-07 13:48 ?0次下載
    EE-128:<b class='flag-5'>C</b>語言中的DSP:從<b class='flag-5'>C</b><b class='flag-5'>調用匯編</b>類成員<b class='flag-5'>函數(shù)</b>