版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章匯編語(yǔ)言和偽指令1采用匯編語(yǔ)言,用戶(hù)可以直接操作到處理器內(nèi)部的工作寄存器和片內(nèi)RAM單元,能把數(shù)據(jù)的處理過(guò)程表述得非常具體和詳實(shí)。匯編語(yǔ)言并不獨(dú)立于具體機(jī)器,是一種非常通用的低級(jí)程序設(shè)計(jì)語(yǔ)言。4.1匯編語(yǔ)言程序設(shè)計(jì)24.1.1匯編語(yǔ)言源程序格式典型的匯編語(yǔ)言格式是四段式格式:標(biāo)號(hào)段:操作碼段操作數(shù)段;注釋段
LABLE:OPCODEOPRAND;COMMENT其中操作碼段是必選項(xiàng),任何語(yǔ)句都必須有操作碼段。如果是多個(gè)操作數(shù),中間用逗號(hào)隔開(kāi)。P1:ADD#1;ACC加1,結(jié)果保存在ACC中BCNDP1,LEQ;如果ACC≤0則轉(zhuǎn)到P134.1.2常用偽指令介紹[指令語(yǔ)句]
每一條指令語(yǔ)句在源程序匯編時(shí)都要產(chǎn)生可供計(jì)算機(jī)執(zhí)行的指令代碼(即目標(biāo)代碼),所以這種語(yǔ)句又叫可執(zhí)行語(yǔ)句。每一條指令語(yǔ)句表示計(jì)算機(jī)具有的一個(gè)基本能力,如數(shù)據(jù)傳送,兩數(shù)相加或相減,移位等,而這種能力是在目標(biāo)程序(指令代碼的有序集合)運(yùn)行時(shí)完成的,是依賴(lài)于汁算機(jī)內(nèi)的中央處理器(CPU)、存儲(chǔ)器、I/O接口等硬件設(shè)備來(lái)實(shí)現(xiàn)的。
4[偽指令語(yǔ)句]
偽指令語(yǔ)句是用于指示匯編程序如何匯編源程序,所以這種語(yǔ)句又叫命令語(yǔ)句。例如源程序中的偽指令語(yǔ)句告訴匯編程序:該源程序如何分段,有哪些邏輯段在程序段中哪些是當(dāng)前段,它們分別由哪個(gè)段寄存器指向;定義了哪些數(shù)據(jù),存儲(chǔ)單元是如何分配的等等。偽指令語(yǔ)句除定義的具體數(shù)據(jù)要生成目標(biāo)代碼外,其他均沒(méi)有對(duì)應(yīng)的目標(biāo)代碼。偽指令語(yǔ)句的這些命令功能是由匯編程序在匯編源程序時(shí),通過(guò)執(zhí)行一段程序來(lái)完成的,而不是在運(yùn)行目標(biāo)程序時(shí)實(shí)現(xiàn)的。
5
6條件匯編偽指令以下分兩種情況介紹條件匯編偽指令。(1)第一種情況:.ifwell-definedexpression.elseifwell-definedexpression.else.endif(2)第二種情況:.loop [well-definedexpression].break[well-definedexpression].endloop74.2C語(yǔ)言程序設(shè)計(jì)用匯編語(yǔ)言編寫(xiě)程序是一件繁雜的事情,開(kāi)發(fā)周期相對(duì)較長(zhǎng)。因此各個(gè)DSP公司都推出了相應(yīng)的高級(jí)語(yǔ)言(如C語(yǔ)言),使得DSP芯片的軟件可以直接使用高級(jí)語(yǔ)言寫(xiě)成。,從而大大提高DSP芯片的開(kāi)發(fā)速度,也使程序的修改和移植變得十分方便。
C語(yǔ)言程序文件的后綴名為.c。在該程序中實(shí)現(xiàn)DSP要完成的功能,由開(kāi)發(fā)人員編寫(xiě)。8C編譯器概述TMS320C2xxC編譯器是一個(gè)功能齊全的優(yōu)化編譯器。它的主要功能是把標(biāo)準(zhǔn)的ANSIC語(yǔ)言程序轉(zhuǎn)換成TMS320DSP芯片能夠識(shí)別執(zhí)行的匯編語(yǔ)言代碼。94.3調(diào)試時(shí)需要的五種文件調(diào)試時(shí)需要以下五種文件:(1)C語(yǔ)言程序(.c)或者匯編語(yǔ)言文件(.asm)(2)頭文件(.h)(3)庫(kù)文件(rts2xx.lib)(4)命令文件(.cmd)(5)復(fù)位和中斷向量文件vectors.asm104.3.1C語(yǔ)言文件文件或匯編語(yǔ)言文件該文件的擴(kuò)展名為:*.c或*.asm;該文件內(nèi)容為DSP所要完成功能的源程序代碼。114.3.2頭文件頭文件的擴(kuò)展名為:*.h;匯編語(yǔ)言頭文件:包含了各種寄存器的名稱(chēng)和地址,此外,用戶(hù)還可以定義各種常量和宏;C語(yǔ)言頭文件:包含了C語(yǔ)言定義下的各種語(yǔ)言定義下的各種寄存器和地址,還包含支持C語(yǔ)言的的各種庫(kù)函數(shù);頭文件必須放在C源程序的開(kāi)始,并使用“#include”語(yǔ)句聲明和添加?;蛘咴趨R編主程序的開(kāi)始使用匯編偽指令.include、.copy對(duì)頭文件進(jìn)行調(diào)用。12頭文件部分寄存器和宏定義舉例:;IMR.set0004h;中斷屏蔽寄存器IFR.set0006h;中斷標(biāo)志寄存器;DELAY_S.macrodelay_value;延時(shí)=0.05μs×延時(shí)計(jì)數(shù)RPT#delay_valueNOP.endm調(diào)用宏:DELAY_S0AC5H13頭文件F2407.h,在該文件中寄存器都以指針?lè)绞竭M(jìn)行尋址。頭文件為DSP的寄存器和位測(cè)試指令的位碼定義助記符144.3.3命令文件擴(kuò)展名為*.cmd,實(shí)現(xiàn)對(duì)程序存儲(chǔ)空間和數(shù)據(jù)存儲(chǔ)器空間的分配;它由三部分組成:一是輸入輸出文件和選項(xiàng)等(該部分可以省略),二是目標(biāo)存儲(chǔ)器定義,使用偽指令MEMORY定義,三是各段的定位,由SECTIONS命令定義。
MEMORY偽指令用來(lái)標(biāo)示實(shí)際存在目標(biāo)系統(tǒng)中并且可被使用的存儲(chǔ)器范圍。每個(gè)存儲(chǔ)器范圍有名字、起始地址和長(zhǎng)度。
SECTIONS偽指令的作用是:描述輸入段怎樣被組合到輸出段;在可執(zhí)行程序內(nèi)定義輸出段;規(guī)定在存儲(chǔ)器內(nèi)何處放置輸出段;允許重命名輸出段。15MEMORY{PAGE0:/*程序存儲(chǔ)器*/name1[(attr)]:origin=constant,length=constant;……namen[(attr)]:origin=constant,length=constant;PAGE1:/*數(shù)據(jù)存儲(chǔ)器*/name1[(attr)]:origin=constant,length=constant;……namen[(attr)]:origin=constant,length=constant;PAGE2:/*I/O空間*/name1[(attr)]:origin=constant,length=constant;……namen[(attr)]:origin=constant,length=constant;}16
SECTIONS{name:[property,property,property,…]name:[property,property,property,…]name:[property,property,property,…]}17
每一個(gè)以name開(kāi)始的段的規(guī)格說(shuō)明定義了一個(gè)輸出段。在段名之后是特性列表,定義段的內(nèi)容以及它們是怎樣被分配的。(1)裝載位置,規(guī)定段將被裝載在存儲(chǔ)器內(nèi)何處。(2)運(yùn)行位置,定義段將在存儲(chǔ)器內(nèi)何處運(yùn)行。(3)輸入段,定義組成輸出段的輸入段。(4)段類(lèi)型,定義特定段類(lèi)型的標(biāo)志。(5)填充值,定義用于填充未初始化空位的數(shù)值。18命令文件舉例-MEMORY偽指令和SECTION偽指令:MEMORY{PAGE0:VECS:origin=0000h,length=0040h/*程序復(fù)位*/PVECS:origin=0040h,length=0F00h/*外設(shè)中斷向量*/PM:origin=1000h,length=6000hPM1:origin=7000h,length=1000hPM2:origin=8000h,length=800h/*如果PON=1,則為SARAM*/B0_PM:origin=0FF00h,length=100h/*如果CNF=1,則為DARAMB0塊*/PAGE1:MMRS:origin=0000h,length=0060hB2:origin=0060h,length=0020h/*DARAMB2塊*/
B0:origin=0200h,length=0100h/*如果CNF=0則為DARAMB0塊*/B1:origin=0300h,length=0100h/*DARAMB1塊*/SARAM:origin=0800h,length=0800h/*如果DON=1則為SARAM*/
PERIPH:origin=7000h,length=1000h/*外設(shè)幀*/EXTRAM:origin=8000h,length=8000h/*外部擴(kuò)展RAM*/PAGE2:
IO_EX:origin=0000h,length=0FFF0hIO_IN:origin=0FFF0h,length=0Fh}19SECTIONS{
.reset:{}>VECSPAGE0
/*復(fù)位中斷向量*/
.vectors:{}>
VECSPAGE0/*中斷向量表*/
.pvecs:{}>
PVECSPAGE0
/*外設(shè)中斷向量表*/
.text:{}>
PMPAGE0
/*代碼*/
.table:{}>
PMPAGE0
.bss:{}>
B1PAGE1
.data0:{}>
B0PAGE1
.data2:{}>
B2PAGE1.stack:{}>
SARAMPAGE1
}204.3.4中斷向量文件中斷向量文件vectors.asm定義了系統(tǒng)中各種中斷服務(wù)程序的入口地址。214.3.5庫(kù)文件rts2xx.librts2xx.lib庫(kù)文件可在C:\CCStudio_v3.1\C2400\cgtools\lib下找到,不得修改,完全復(fù)制到需要的地方。rts2xx.lib包含以下內(nèi)容:ANSIC標(biāo)準(zhǔn)庫(kù);系統(tǒng)啟動(dòng)程序_c_int0;允許C訪(fǎng)問(wèn)特殊指令的函數(shù)和宏。224.4C語(yǔ)言和匯編語(yǔ)言混合編程方法4.4.1在C語(yǔ)言中嵌入?yún)R編語(yǔ)言程序1.在C語(yǔ)言中嵌入單條匯編語(yǔ)句//系統(tǒng)初始化程序voidinital(){asm("setcSXM");//SXM位置1,抑制符號(hào)擴(kuò)展位asm("clrcOVM");//OVM位清0,累加器中結(jié)果正常溢出asm("clrcCNF");//CNF位清0,B0被映射到數(shù)據(jù)存儲(chǔ)器空間}232.在C語(yǔ)言中嵌入實(shí)現(xiàn)某一完整功能的多條匯編語(yǔ)句
在C語(yǔ)言中調(diào)用匯編語(yǔ)言編寫(xiě)的子程序,用戶(hù)必須遵循相關(guān)規(guī)則自行維護(hù)模塊的入口和出口代碼,主要應(yīng)弄清楚堆棧的使用情況。244.5分開(kāi)編寫(xiě)C語(yǔ)言和匯編語(yǔ)言程序1.分離的C語(yǔ)言程序和匯編語(yǔ)言程序接口
須注意:在編寫(xiě)匯編語(yǔ)言程序時(shí),必須遵守有關(guān)調(diào)用規(guī)則和寄存器規(guī)則,這樣不會(huì)影響C語(yǔ)言程序的運(yùn)行環(huán)境。252.在C語(yǔ)言程序中訪(fǎng)問(wèn)匯編語(yǔ)言程序的變量
2種操作方法:(1)匯編變量在.bss段中定義采用.bss命令定義變量采用.global命令定義變量在變量名前加一下劃線(xiàn)“_”在C語(yǔ)言程序中將變量說(shuō)明為外部變量26(2)用.set和.global命令定義的常數(shù)。在匯編語(yǔ)言中將常數(shù)符號(hào)定義成全局常數(shù);在C語(yǔ)言程序中訪(fǎng)問(wèn)匯編語(yǔ)言程序中的常數(shù)時(shí),應(yīng)在常數(shù)前加一個(gè)地址符號(hào)“&”273.在匯編語(yǔ)言程序中訪(fǎng)問(wèn)C語(yǔ)言程序變量在C語(yǔ)言程序中定義變量(如x);在匯編語(yǔ)言程序中使用前面加下劃線(xiàn)“_”(如_x)。284.6用C語(yǔ)言處理DSP中斷1.通過(guò)軟件識(shí)別中斷標(biāo)志的方法實(shí)現(xiàn)可屏蔽的中斷
例如,要實(shí)現(xiàn)捕捉單元4的中斷(CAP4INT),則先建立一個(gè)復(fù)位和中斷向量文件vectors.asm.title"vectors.asm".ref_c_int0,_nothing,_capint;定義每個(gè)需要用到的符號(hào).sect".vectors"reset:b_c_int0;復(fù)位向量INT1:b_nothingINT2:b_nothingINT3:b_nothingINT4:b_capint;當(dāng)發(fā)生INT4中斷時(shí),程序跳轉(zhuǎn)至capint所標(biāo)志;的終端服務(wù)程序INT5:b_nothingINT6:b_nothing;當(dāng)發(fā)生其他級(jí)別中斷時(shí),直接跳轉(zhuǎn)至nothing
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 污水課程設(shè)計(jì)紫外消毒
- 數(shù)字電路ic課程設(shè)計(jì)
- 教育培訓(xùn)行業(yè)教學(xué)方法培訓(xùn)體驗(yàn)
- 電子課程設(shè)計(jì)網(wǎng)課答案
- 稅務(wù)工作總結(jié)制度建設(shè)與規(guī)范化監(jiān)督
- 急救護(hù)理工作總結(jié)
- 貸款經(jīng)理工作總結(jié)
- 電信通訊科技行業(yè)技術(shù)分析
- 旅游行業(yè)促銷(xiāo)活動(dòng)總結(jié)
- 酒店用品銷(xiāo)售工作總結(jié)
- 道路運(yùn)輸企業(yè)安全生產(chǎn)管理人員安全考核試題題庫(kù)與答案
- 年終抖音運(yùn)營(yíng)述職報(bào)告
- 車(chē)間修繕合同模板
- 腦梗死患者的護(hù)理常規(guī)
- 2024年7月國(guó)家開(kāi)放大學(xué)法律事務(wù)專(zhuān)科《法律咨詢(xún)與調(diào)解》期末紙質(zhì)考試試題及答案
- 護(hù)士條例解讀
- 醫(yī)務(wù)人員崗前培訓(xùn)課件
- SQE年終總結(jié)報(bào)告
- 檢修工(題庫(kù))附答案
- 2025屆高考語(yǔ)文一輪復(fù)習(xí):小說(shuō)情節(jié)結(jié)構(gòu)之伏筆 練習(xí)題(含答案)
- 《化學(xué)實(shí)驗(yàn)室安全》課程教學(xué)大綱
評(píng)論
0/150
提交評(píng)論