久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

針對Ti的DSP C語言編程

 浮 生 2009-05-15
針對Ti的DSP C語言編程
2008-05-26 17:24

在C和匯編混合編程的時候,,存在C語言和匯編語言
的變量以及函數(shù)的接口問題,。
在C程序中定義的變量,編譯為.asm文件后,,都被
放進了.bss區(qū),,而且變量名的前面都帶了一個下劃
線,。在C程序中定義的函數(shù),編譯后在函數(shù)名前也
帶了一個下劃線,。例如:

extern int num就會變成 .bss _num, 1
extern float nums[5]就會變成.bss _nums, 5
extern void func ( )就會變成 _func,

一 匯編和C的相互調(diào)用可以分以下幾種情況:
(1) 匯編程序中訪問c程序中的變量和函數(shù),。
在匯編程序中,用_XX就可以訪問C中的變量XX了,。
訪問數(shù)組時,,可以用_XX+偏移量來訪問,如_XX+3
訪問了數(shù)組中的XX[3],。

在匯編程序調(diào)用C函數(shù)時,,如果沒有參數(shù)傳遞,直
接用_funcname 就可以了,。如果有參數(shù)傳遞,,則函
數(shù)中最左邊的一個參數(shù)由寄存器A給出,其他的參
數(shù)按順序由堆棧給出,。返回值是返回到A寄存器或
者由A寄存器給出的地址,。同時注意,為了能夠讓
匯編語言能訪問到C語言中定義的變量和函數(shù),,他
們必須聲明為外部變量,,即加extern 前綴。

(2) c程序中訪問匯編程序中的變量
如果需要在c程序中訪問匯編程序中的變量,,則匯
編程序中的變量名必須以下劃線為首字符,,并用
global使之成為全局變量。

如果需要在c程序中調(diào)用匯編程序中的過程,,則過程
名必須以下劃線為首字符,,并且,要根據(jù)c程序編譯
時使用的模式是stack-based model還是register
argument model來正確地編寫該過程,,使之能正確
地取得調(diào)用參數(shù),。

(3) 在線匯編

在C程序中直接插入 asm(“\t*** ”),內(nèi)嵌匯編語
句,,需要注意的是這種用法要慎用,,在線匯編提供
了能直接讀寫硬件的能力,如讀寫中斷控制允許寄
存器等,,但編譯器并不檢查和分析在線匯編語言,,
插入在線匯編語言改變匯編環(huán)境或可能改變C變量
的值可能導(dǎo)致嚴重的錯誤。

二 匯編和C接口中尋址方式的改變:
需要注意的是,,在C語言中,,對于局部變量的建立
和訪問,是通過堆棧實現(xiàn)的,它的尋址是通過堆棧
寄存器SP實現(xiàn)的,。而在匯編語言中,,為了使程序代
碼變得更為精簡,TI在直接尋址方式中,,地址的低
7位直接包含在指令中,,這低7位所能尋址的具體位
置可由DP寄存器或SP寄存器決定。具體實現(xiàn)可通過
設(shè)置ST1寄存器的CPL位實現(xiàn),,CPL=0,,DP尋址,
CPL=1,,SP尋址,。在DP尋址的時候,由DP提供高9位
地址,,與低7位組成16位地址,;在SP尋址的時候,
16位地址是由SP(16位)與低7位直接相加得來,。

由于在C語言的環(huán)境下,,局部變量的尋址必須通過
SP寄存器實現(xiàn),在混合編程的時候,,為了使匯編語
言不影響堆棧寄存器SP,,通常的方式是在匯編環(huán)境
中使用DP方式尋址,這樣可以使二者互不干擾,。編
程中只要注意對CPL位正確設(shè)置即可,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多