彭啟琮DSP視頻教程課件3_第1頁
彭啟琮DSP視頻教程課件3_第2頁
彭啟琮DSP視頻教程課件3_第3頁
彭啟琮DSP視頻教程課件3_第4頁
彭啟琮DSP視頻教程課件3_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第三章第三章 DSP的軟件結(jié)構(gòu)的軟件結(jié)構(gòu) 尋址方式:立即數(shù)尋址尋址方式:立即數(shù)尋址 v短立即數(shù)尋址(單字指令)短立即數(shù)尋址(單字指令) 在指令字中包括立即操作數(shù)在指令字中包括立即操作數(shù) RPT #99 ;將下一條指令循環(huán);將下一條指令循環(huán)100次次 LD #0h,DP ;將;將0裝入數(shù)據(jù)頁指針裝入數(shù)據(jù)頁指針 ADD #0ffh,A ;將;將0ffh加給加給AccA 尋址方式:立即數(shù)尋址尋址方式:立即數(shù)尋址 尋址方式:立即數(shù)尋址尋址方式:立即數(shù)尋址 v長立即數(shù)尋址長立即數(shù)尋址 指令字的后一個(gè)字是立即數(shù)(雙字指令字的后一個(gè)字是立即數(shù)(雙字 指令)指令) ADD #1234h,A ;將;將#1234

2、h加給加給 AccA 尋址方式:立即數(shù)尋址尋址方式:立即數(shù)尋址 絕對地址尋址絕對地址尋址 v數(shù)據(jù)存儲器地址(數(shù)據(jù)存儲器地址(dmad)尋址)尋址: 用一個(gè)符號或一個(gè)數(shù)來確定數(shù)據(jù)空間中的用一個(gè)符號或一個(gè)數(shù)來確定數(shù)據(jù)空間中的 一個(gè)地址一個(gè)地址 例:例: MVKD sample,*AR5 sample所代表的就是一個(gè)所代表的就是一個(gè)dmad 絕對地址尋址絕對地址尋址 v程序存儲器地址(程序存儲器地址(pmad)尋址)尋址: 用一個(gè)符號或一個(gè)數(shù)來確定程序地址用一個(gè)符號或一個(gè)數(shù)來確定程序地址 空間中的一個(gè)地址空間中的一個(gè)地址 例:例: MVKD table,*AR5 table 所代表的就是一個(gè)所代表的

3、就是一個(gè)pmad 絕對地址尋址絕對地址尋址 v端口地址端口地址(PA)尋址尋址 用一個(gè)符號或常數(shù)來確定用一個(gè)符號或常數(shù)來確定I/O口地址口地址 PORTR PA, Smem PORTW Smem, PA 絕對地址尋址絕對地址尋址 v*(lk)尋址尋址 用一個(gè)符號或一個(gè)常數(shù)來確定數(shù)據(jù)存儲器用一個(gè)符號或一個(gè)常數(shù)來確定數(shù)據(jù)存儲器 中的一個(gè)地址中的一個(gè)地址 例:例: LD *(BUFFER),),A 把地址為把地址為BUFFER的數(shù)據(jù)單元中的數(shù)據(jù)裝到的數(shù)據(jù)單元中的數(shù)據(jù)裝到 AccA中中 累加器尋址累加器尋址 用累加器中的數(shù)作為一個(gè)地址,可用來對用累加器中的數(shù)作為一個(gè)地址,可用來對 存放數(shù)據(jù)的程序存儲器

4、尋址:存放數(shù)據(jù)的程序存儲器尋址: READA Smem WRITA Smem vREADA,把累加器,把累加器A所確定的程序存儲器單元所確定的程序存儲器單元 中的一個(gè)字,傳送到數(shù)據(jù)存儲器單元中的一個(gè)字,傳送到數(shù)據(jù)存儲器單元Smem中。中。 vWRITA,把數(shù)據(jù)單元,把數(shù)據(jù)單元Smem中的一個(gè)字,傳送中的一個(gè)字,傳送 到累加器到累加器A確定的程序存儲器單元。確定的程序存儲器單元。 存儲器映射寄存器存儲器映射寄存器(MMR)尋址尋址 v存儲器映射寄存器尋址用來修改存存儲器映射寄存器尋址用來修改存 儲器映射寄存器而不影響當(dāng)前數(shù)據(jù)儲器映射寄存器而不影響當(dāng)前數(shù)據(jù) 頁指針(頁指針(DP)或堆棧指針()或堆

5、棧指針(SP)的)的 值。存儲器映射寄存器尋址既可以值。存儲器映射寄存器尋址既可以 在直接尋址中使用,又可以在間接在直接尋址中使用,又可以在間接 尋址中使用。尋址中使用。 堆棧尋址堆棧尋址 系統(tǒng)堆棧用來在中斷和子程序期系統(tǒng)堆棧用來在中斷和子程序期 間自動存放程序計(jì)數(shù)器。它也能用間自動存放程序計(jì)數(shù)器。它也能用 來存放額外的數(shù)據(jù)項(xiàng)或傳遞數(shù)據(jù)值。來存放額外的數(shù)據(jù)項(xiàng)或傳遞數(shù)據(jù)值。 處理器使用一個(gè)處理器使用一個(gè)16-bit的存儲器映射的存儲器映射 寄存器寄存器堆棧指針來對堆棧尋址,堆棧指針來對堆棧尋址, 它總是指向存放在堆棧中的最后一它總是指向存放在堆棧中的最后一 個(gè)元素。個(gè)元素。 尋址方式:直接尋址尋

6、址方式:直接尋址 vTMS320C54的數(shù)據(jù)存儲器分為的數(shù)據(jù)存儲器分為512頁,每頁,每 頁頁128字。設(shè)置一個(gè)數(shù)據(jù)頁指針字。設(shè)置一個(gè)數(shù)據(jù)頁指針DP(Data Pointer),用),用9-bit指向一個(gè)數(shù)據(jù)頁,再指向一個(gè)數(shù)據(jù)頁,再 加上一個(gè)加上一個(gè)7-bit的頁內(nèi)偏移地址,形成的頁內(nèi)偏移地址,形成16- bit的數(shù)據(jù)地址的數(shù)據(jù)地址 LD #4,DP ;指向頁;指向頁4(0200h-027Fh) ADD 9h,A ;將數(shù)據(jù)頁;將數(shù)據(jù)頁4中地址中地址9h的的 數(shù)據(jù)加給數(shù)據(jù)加給AccA 尋址方式:直接尋址尋址方式:直接尋址 尋址方式:間接尋址尋址方式:間接尋址 v8個(gè)輔助寄存器(個(gè)輔助寄存器(AR

7、0-AR7),由一個(gè)),由一個(gè) 輔助寄存器指針(輔助寄存器指針(ARP 3-bit)來指定)來指定 v輔助寄存器算術(shù)單元(輔助寄存器算術(shù)單元(ARAU)作)作16-bit 無符號數(shù)運(yùn)算,決定一個(gè)新的地址,裝入無符號數(shù)運(yùn)算,決定一個(gè)新的地址,裝入 輔助寄存器中的一個(gè)輔助寄存器中的一個(gè) vAR0-AR7的內(nèi)容相當(dāng)靈活,可以裝入立的內(nèi)容相當(dāng)靈活,可以裝入立 即數(shù),加上立即數(shù),減去立即數(shù);也可以即數(shù),加上立即數(shù),減去立即數(shù);也可以 從數(shù)據(jù)存儲器裝入地址;還可以作以下的從數(shù)據(jù)存儲器裝入地址;還可以作以下的 變址尋址:變址尋址: 尋址方式:間接尋址尋址方式:間接尋址 尋址方式:間接尋址尋址方式:間接尋址

8、尋址方式:間接尋址尋址方式:間接尋址 v將該將該AR的內(nèi)容加的內(nèi)容加1或減或減1,再尋址,再尋址 (循環(huán)常用)(循環(huán)常用) v將該將該AR的內(nèi)容加上或減去的內(nèi)容加上或減去AR0的的 內(nèi)容,再尋址。內(nèi)容,再尋址。 v將該將該AR的內(nèi)容逆向進(jìn)位加上或減去的內(nèi)容逆向進(jìn)位加上或減去 AR0的內(nèi)容,再尋址。的內(nèi)容,再尋址。 尋址方式:間接尋址尋址方式:間接尋址 ADD *,8,A ;將當(dāng)前輔助寄存;將當(dāng)前輔助寄存 器所指的地址里的數(shù)據(jù),左移器所指的地址里的數(shù)據(jù),左移8-bit 后加給后加給AccA ADD *+,8,A,AR4 ;數(shù)據(jù)左移;數(shù)據(jù)左移 ,加給,加給AccA后,當(dāng)前輔助寄存器加后,當(dāng)前輔助寄

9、存器加1 ,選擇輔助寄存器,選擇輔助寄存器AR4 尋址方式:間接尋址尋址方式:間接尋址 ADD *0+,8,A ;執(zhí)行加法后,;執(zhí)行加法后, 將將AR0的值加給當(dāng)前輔助寄存器的值加給當(dāng)前輔助寄存器 ADD *BR0+,8,A ;執(zhí)行加法后,;執(zhí)行加法后, 將將AR0的值加給當(dāng)前輔助寄存器,但的值加給當(dāng)前輔助寄存器,但 反向進(jìn)位反向進(jìn)位 正向進(jìn)位與反向進(jìn)位正向進(jìn)位與反向進(jìn)位 1 0 0 1 0 0 + 1 0 0 + 1 0 0 1 0 0 0 0 1 0 位倒序?qū)ぶ肺坏剐驅(qū)ぶ?AR0 = 100 AR1 = 000 按按AR1尋址后,將尋址后,將AR0加給加給AR1, 反向進(jìn)位反向進(jìn)位 位倒序

10、尋址位倒序?qū)ぶ?原序原序 原地址原地址 位倒序后地址位倒序后地址 位倒序位倒序 0 000 000 0 1 001 100 4 2 010 010 2 3 011 110 6 4 100 001 1 5 101 101 5 6 110 011 3 7 111 111 7 .mmregs .bss x, 4, 1 a0.word 012h a1.word 3211h a2.word fe11h a3.word ff03h .sect “program” LD #X, AR1 LD #0, A,AR1 LD #a0, T MAC *+,A LD #a1,T MAC *+,A LD #a2,T MA

11、C *+,A LD #a3,T MAC *,A 33221100 3 0 0 xaxaxaxaxay i ii 循環(huán)尋址循環(huán)尋址 許多算法,如卷積,相關(guān)和許多算法,如卷積,相關(guān)和FIR濾波等,濾波等, 都需要在存儲器中實(shí)現(xiàn)一個(gè)循環(huán)緩沖器。都需要在存儲器中實(shí)現(xiàn)一個(gè)循環(huán)緩沖器。 在這些算法中,一個(gè)循環(huán)緩沖器就是一在這些算法中,一個(gè)循環(huán)緩沖器就是一 個(gè)包含了最近的數(shù)據(jù)的滑動窗口。當(dāng)新個(gè)包含了最近的數(shù)據(jù)的滑動窗口。當(dāng)新 的數(shù)據(jù)來到時(shí),緩沖器就會覆蓋最早的的數(shù)據(jù)來到時(shí),緩沖器就會覆蓋最早的 數(shù)據(jù)。循環(huán)緩沖器實(shí)現(xiàn)的關(guān)鍵是循環(huán)尋數(shù)據(jù)。循環(huán)緩沖器實(shí)現(xiàn)的關(guān)鍵是循環(huán)尋 址的實(shí)現(xiàn)。址的實(shí)現(xiàn)。C54x間接尋址中提供了

12、循間接尋址中提供了循 環(huán)尋址的方式,以環(huán)尋址的方式,以%表示表示。 循環(huán)尋址循環(huán)尋址 定義循環(huán)緩沖器大小寄存器(定義循環(huán)緩沖器大小寄存器(BK)來確)來確 定循環(huán)緩沖器的大小。用循環(huán)緩沖器的定循環(huán)緩沖器的大小。用循環(huán)緩沖器的 有效基地址(有效基地址(EFB)和尾地址()和尾地址(EOB) 來組成循環(huán)地址。來組成循環(huán)地址。step是加到輔助寄存器,是加到輔助寄存器, 或從輔助寄存器中減去的值?;驈妮o助寄存器中減去的值。 匯編程序語法匯編程序語法 TMS320的匯編程序包含匯編指令的匯編程序包含匯編指令 (偽指令,(偽指令,assembler directives)、)、 匯編語言指令(匯編語言指

13、令(assembly language instructions)、宏指令()、宏指令(macro directives)和注釋()和注釋(comments)。)。 C54的指令既可以是助記符方的指令既可以是助記符方 式,也可以是代數(shù)式方式式,也可以是代數(shù)式方式 助記符方式匯編程序語法助記符方式匯編程序語法 label: mnemonic operand list ;comment 標(biāo)號標(biāo)號: 助記符助記符 操作數(shù)操作數(shù) ;注釋;注釋 匯編程序語法匯編程序語法 v所有的語句必須由語句標(biāo)號、空格、所有的語句必須由語句標(biāo)號、空格、* * 號或號或 ;號開頭。;號開頭。 v語句標(biāo)號不是必須的,如果用

14、,就必須語句標(biāo)號不是必須的,如果用,就必須 在第一列。在第一列。 v語句中的各部分之間,由一個(gè)或多個(gè)空語句中的各部分之間,由一個(gè)或多個(gè)空 格分開。格分開。 v注釋不是必須的。注釋可以從第一列的注釋不是必須的。注釋可以從第一列的 * * 號或號或 ;號開頭;如果不是從第一列開;號開頭;如果不是從第一列開 始,就必須用始,就必須用 ;號開頭。;號開頭。 語句標(biāo)號語句標(biāo)號 由字母、數(shù)字、由字母、數(shù)字、_、$組成,最多不組成,最多不 超過超過32個(gè)字符,對大小寫敏感,第個(gè)字符,對大小寫敏感,第 一個(gè)字符不能是數(shù)字。后跟一個(gè)字符不能是數(shù)字。后跟 :,但:,但 分號不是語句標(biāo)號的組成部分分號不是語句標(biāo)號的

15、組成部分。 助記符助記符 v助記符不允許從第一列開始,否則助記符不允許從第一列開始,否則 被認(rèn)為是語句標(biāo)號。被認(rèn)為是語句標(biāo)號。 v助記符可以是機(jī)器指令(如助記符可以是機(jī)器指令(如ABS, M P Y U , S P H 等 ) 、 偽 指 令等 ) 、 偽 指 令 (如(如.data, .list, .set等)、宏指令等)、宏指令 (如(如.macro, .var, .mexit等)和宏調(diào)用。等)和宏調(diào)用。 操作數(shù)操作數(shù) 操作數(shù)可以是常數(shù)、符號或表達(dá)式。操作數(shù)可以是常數(shù)、符號或表達(dá)式。 當(dāng)操作數(shù)多于一個(gè)時(shí),用逗號分開當(dāng)操作數(shù)多于一個(gè)時(shí),用逗號分開。 常數(shù)常數(shù) v二進(jìn)制常數(shù)(如二進(jìn)制常數(shù)(如0

16、1B或或01b) v八進(jìn)制常數(shù)(如八進(jìn)制常數(shù)(如10Q或或10q) v十進(jìn)制常數(shù)(如十進(jìn)制常數(shù)(如23) v十六進(jìn)制常數(shù)(如十六進(jìn)制常數(shù)(如78H或或78h) v字符常數(shù)(如字符常數(shù)(如A或或b) v字符串(如字符串(如“sample program”) v匯編時(shí)使用的常數(shù)匯編時(shí)使用的常數(shù) 表達(dá)式表達(dá)式 v表達(dá)式是一個(gè)常數(shù)、符號、或用算表達(dá)式是一個(gè)常數(shù)、符號、或用算 術(shù)運(yùn)算符連接起來的常數(shù)或符號。術(shù)運(yùn)算符連接起來的常數(shù)或符號。 表達(dá)式的值的范圍為表達(dá)式的值的范圍為-32768到到32767 指令指令 TMS320C54x的指令集有近兩百條指令,的指令集有近兩百條指令, 按功能分為如下幾類按功能

17、分為如下幾類: v算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 v邏輯運(yùn)算指令邏輯運(yùn)算指令 v程序控制指令程序控制指令 v裝入和存儲指令裝入和存儲指令 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 加法指令加法指令 減法指令減法指令 乘法指令乘法指令 乘加指令乘加指令 乘減指令乘減指令 雙數(shù)雙數(shù)/ /雙精度指令雙精度指令 特殊操作指令特殊操作指令 加法指令加法指令 減法指令減法指令 乘法指令乘法指令 乘加和乘減指令乘加和乘減指令 乘加(乘加(TMS320C50) MAC dma,pma 程序存儲器的值乘以程序存儲器的值乘以 數(shù)據(jù)存儲器的值并累加到數(shù)據(jù)存儲器的值并累加到ACC (ACC) + (shifted P register)

18、- ACC (dma) - TREG (dma) x (pma, addressed by FPC) - P register Modify AR(ARP) and ARP as specified (FPC) + 1 - FPC MAC X0,Y0,A X:(R0)+,X0 Y:(R4)+N4,Y0 這條指令命令這條指令命令DSP56300 l將寄存器將寄存器X0和和Y0中的數(shù)相乘中的數(shù)相乘 l結(jié)果加到結(jié)果加到Acc A中中 l將寄存器將寄存器R0所指的所指的X存儲器地址中存儲器地址中 的值裝入寄存器的值裝入寄存器X0 l將寄存器將寄存器R4所指的所指的Y存儲器地址中存儲器地址中 的值裝入寄

19、存器的值裝入寄存器Y0 lR0的值加的值加1 l寄存器寄存器N4的值加給的值加給R4 邏輯運(yùn)算指令邏輯運(yùn)算指令 移位指令移位指令 測試指令測試指令 程序控制指令程序控制指令 v分支指令分支指令 v調(diào)用指令調(diào)用指令 v中斷指令中斷指令 v返回指令返回指令 v循環(huán)指令循環(huán)指令 v堆棧操作指令堆棧操作指令 v混合程序控制指令混合程序控制指令 轉(zhuǎn)移指令轉(zhuǎn)移指令 調(diào)用指令調(diào)用指令 中斷指令中斷指令 返回指令返回指令 循環(huán)指令循環(huán)指令 堆棧操作指令堆棧操作指令 程序控制指令程序控制指令 裝入和存儲指令裝入和存儲指令 v一般的裝入和存儲指令一般的裝入和存儲指令 v條件存儲指令條件存儲指令 v并行裝入和存儲指

20、令并行裝入和存儲指令 v并行裝入和乘法指令并行裝入和乘法指令 v并行存儲和加件乘指令并行存儲和加件乘指令 v混合裝入和存儲指令混合裝入和存儲指令 一般的裝入指令一般的裝入指令 存貯指令存貯指令 并行裝入和乘法指令并行裝入和乘法指令 混合裝入和存儲指令混合裝入和存儲指令 FIRS指令指令 FIRS指令用于指令用于 線性相位濾波器線性相位濾波器 的處理。一個(gè)如的處理。一個(gè)如 右圖的右圖的8階線性階線性 相位濾波器的輸相位濾波器的輸 出表達(dá)式出表達(dá)式 FIRS *AR2+, *AR3+, COEFFS y = (c0*x0) + (c1*x1) + (c2*x2) + + (c6*x6) + (c7

21、*x7) = c0(x0 + x7) + c1(x1 + x6) + c2(x2 + x5) + c3(x3 + x4) Viterbi譯碼指令譯碼指令 DADST、DSADT、CMPS 在信道均衡和解碼中經(jīng)常會使用到在信道均衡和解碼中經(jīng)常會使用到 Viterbi算法,算法,C54x為此提供了專門為此提供了專門 的硬件和指令。根據(jù)輸入信號確定的硬件和指令。根據(jù)輸入信號確定 分支似然概率增加量分支似然概率增加量D1/D2,放在,放在T 寄存器中,寄存器中,TRN存儲可能信號譯碼存儲可能信號譯碼 輸出。輸出。 Viterbi譯碼指令譯碼指令 DADST、DSADT、CMPS Viterbi譯碼指令

22、譯碼指令 DADST、DSADT、CMPS 最小均方運(yùn)算最小均方運(yùn)算LMS 在進(jìn)行自適應(yīng)濾波等操作中經(jīng)常會使在進(jìn)行自適應(yīng)濾波等操作中經(jīng)常會使 用用LMS算法,算法,C54x提供的提供的LMS指令指令 方便了編程。如下圖所示的自適應(yīng)方便了編程。如下圖所示的自適應(yīng) 濾波器設(shè)計(jì)中,濾波器系數(shù)修正公濾波器設(shè)計(jì)中,濾波器系數(shù)修正公 式為:式為: )()(2)() 1(ixieiwiw kk 最小均方運(yùn)算最小均方運(yùn)算LMS )()( 1 0 kixwiy N k k 基于基于LMS的自適應(yīng)濾波程序的自適應(yīng)濾波程序 數(shù)據(jù)歸一化相關(guān)指令數(shù)據(jù)歸一化相關(guān)指令EXP、NORM 歸一化一個(gè)數(shù)是先求其指數(shù),然后歸一化一

23、個(gè)數(shù)是先求其指數(shù),然后 把它調(diào)整到最大精度格式。實(shí)現(xiàn)方把它調(diào)整到最大精度格式。實(shí)現(xiàn)方 法如下:法如下: 數(shù)據(jù)塊移動數(shù)據(jù)塊移動MVDD、MVDP、MVPD 在在C54x系列系列DSP中,中,數(shù)據(jù)與數(shù)據(jù)存數(shù)據(jù)與數(shù)據(jù)存 儲器、數(shù)據(jù)與程序存儲器之間可以儲器、數(shù)據(jù)與程序存儲器之間可以 方便的進(jìn)行數(shù)據(jù)傳輸,結(jié)合單指令方便的進(jìn)行數(shù)據(jù)傳輸,結(jié)合單指令 循環(huán)可實(shí)現(xiàn)數(shù)據(jù)塊移動。如循環(huán)可實(shí)現(xiàn)數(shù)據(jù)塊移動。如16個(gè)系個(gè)系 數(shù)的移動:數(shù)的移動: 并行指令并行指令 ST A,*AR4- | MAC *AR5+,B 累加器累加器A中的高位數(shù)按原定的位數(shù)移動后,中的高位數(shù)按原定的位數(shù)移動后, 存入存入AR4指定的存儲器單元,指

24、定的存儲器單元,AR4中的地址中的地址 減減1; AR5指定的存儲器單元中的數(shù)與指定的存儲器單元中的數(shù)與T寄存器寄存器 中的數(shù)相乘,其積加到累加器中的數(shù)相乘,其積加到累加器B 中,中, AR5 中的地址加中的地址加1。 偽指令(偽指令(Assembler Directives) 偽指令為程序提供數(shù)據(jù)、控制匯編過程。偽指令為程序提供數(shù)據(jù)、控制匯編過程。 所作的工作包括:所作的工作包括: l將代碼和數(shù)據(jù)匯編到指定的位置。將代碼和數(shù)據(jù)匯編到指定的位置。 l在存儲器中為未初始化的變量保留存儲空間。在存儲器中為未初始化的變量保留存儲空間。 l控制列表的方式。控制列表的方式。 l初始化存儲器初始化存儲器

25、l匯編條件塊。匯編條件塊。 l定義全局變量。定義全局變量。 l為匯編器指定可以獲得宏的庫為匯編器指定可以獲得宏的庫 l檢查符號調(diào)試信息檢查符號調(diào)試信息 段定義偽指令段定義偽指令 v.bss 在該段中保留若干字在該段中保留若干字 v.data 匯編入已初始化的數(shù)據(jù)段匯編入已初始化的數(shù)據(jù)段 v.sect “section name” 匯編入已命名的段匯編入已命名的段 v.text 匯編入可執(zhí)行的代碼段匯編入可執(zhí)行的代碼段 初始化常數(shù)偽指令初始化常數(shù)偽指令 v.float 初始化一個(gè)初始化一個(gè)32-bit的浮點(diǎn)常數(shù)的浮點(diǎn)常數(shù) 初始化一個(gè)或多個(gè)初始化一個(gè)或多個(gè)16-bit的整數(shù)的整數(shù) v.

26、string 初始化一個(gè)或多個(gè)字符串初始化一個(gè)或多個(gè)字符串 v.word 初始化一個(gè)或多個(gè)初始化一個(gè)或多個(gè)16-bit的整數(shù)的整數(shù) 格式化輸出列表的偽指令格式化輸出列表的偽指令 v.list 開始源文件列表開始源文件列表 v.nolist 停止源文件列表停止源文件列表 v.length 設(shè)置源文件列表的頁長度設(shè)置源文件列表的頁長度 v.title 在列表文件每一頁打印文件名在列表文件每一頁打印文件名 引用其他文件的偽指令引用其他文件的偽指令 v.copy /.include 包含其他文件的源語句包含其他文件的源語句 v.global 確認(rèn)一個(gè)或多個(gè)全局確認(rèn)一個(gè)或多個(gè)全局(外部外部)符號符號 v

27、.mlib 定義宏庫定義宏庫 條件匯編偽指令條件匯編偽指令 v.if/.else/.endif 條件匯編代碼塊條件匯編代碼塊 v.loop/.endloop 循環(huán)匯編代碼塊循環(huán)匯編代碼塊 v.break 終止循環(huán)匯編代碼塊終止循環(huán)匯編代碼塊 匯編時(shí)的符號匯編時(shí)的符號 v.equ/.set 使一個(gè)符號等于一個(gè)值使一個(gè)符號等于一個(gè)值 v.end 結(jié)束程序結(jié)束程序 宏語言宏語言 vMacro: A user-defined routine that can be used as an instruction v匯編器支持宏語言,使用戶可匯編器支持宏語言,使用戶可 以建立自己的以建立自己的“指令指令”

28、。當(dāng)程序。當(dāng)程序 要將特定的任務(wù)執(zhí)行若干次時(shí),要將特定的任務(wù)執(zhí)行若干次時(shí), 尤其有用尤其有用。 宏語言可以使用戶:宏語言可以使用戶: l定義自己的宏,或重新定義正執(zhí)行的宏定義自己的宏,或重新定義正執(zhí)行的宏 l簡化長的或復(fù)雜的匯編代碼簡化長的或復(fù)雜的匯編代碼 l訪問由歸檔器建立的宏庫訪問由歸檔器建立的宏庫 l在一個(gè)宏內(nèi)定義條件塊和可重復(fù)的塊在一個(gè)宏內(nèi)定義條件塊和可重復(fù)的塊 l在一個(gè)宏內(nèi)操作字符串在一個(gè)宏內(nèi)操作字符串 l 控制展開列表控制展開列表 定義宏定義宏 在程序中使用宏之前,首先必須定在程序中使用宏之前,首先必須定 義它??梢杂脙煞N方法來定義:義它。可以用兩種方法來定義: (1)在源文件或)

29、在源文件或.include/.copy文件中定義文件中定義 (2)在宏庫中定義)在宏庫中定義 定義宏定義宏 macname .macro parameter model statements .mexit .endm 定義宏定義宏 vmacname 宏的名字宏的名字 v.macro 是一個(gè)偽指令,確認(rèn)源語句為是一個(gè)偽指令,確認(rèn)源語句為 宏定義的第一行宏定義的第一行 vparameters 選項(xiàng),作為選項(xiàng),作為.macro偽指令偽指令 的操作數(shù)的操作數(shù) vModel statements 每次調(diào)用宏時(shí)執(zhí)行的每次調(diào)用宏時(shí)執(zhí)行的 指令或偽指令指令或偽指令 v.endm 終止宏定義終止宏定義 定義宏舉

30、例定義宏舉例 * add3 p1, p2, p3 * p3 = p1 + p2 + p3 add3 .macro p1, p2, p3 ld p1,a add p2,a add p3,a stl a,p3 .endm 調(diào)用宏調(diào)用宏 在源程序中用宏的名字作為操作在源程序中用宏的名字作為操作 碼來調(diào)用宏碼來調(diào)用宏 add3 x, y, z 展開宏展開宏 v在源程序調(diào)用宏時(shí),匯編器將其展在源程序調(diào)用宏時(shí),匯編器將其展 開。在展開時(shí),匯編器將變量傳遞開。在展開時(shí),匯編器將變量傳遞 給宏參數(shù),用宏定義取代宏調(diào)用語給宏參數(shù),用宏定義取代宏調(diào)用語 句,然后匯編其源代碼。在省缺情句,然后匯編其源代碼。在省缺情

31、 況下,宏展開打印在列表文件中。況下,宏展開打印在列表文件中。 可以用偽指令可以用偽指令.mnolist來停止其展開來停止其展開 的列表。的列表。 展開宏展開宏 0000 2000 ld x,a 0001 0001 add y,a 0002 0002 add z,a 0003 6200 stl a,z * Reserve space for vars 0000 .bss x, 1 0001 .bss y, 1 0002 .bss z, 1 宏庫宏庫 定義宏的一種方法是建立一個(gè)宏定義宏的一種方法是建立一個(gè)宏 庫。宏庫是包含有宏定義的文件的庫。宏庫是包含有宏定義的文件的 集合。必須使用歸檔器來把這

32、些文集合。必須使用歸檔器來把這些文 件收集到一個(gè)文件中。宏庫中的每件收集到一個(gè)文件中。宏庫中的每 一個(gè)成員都包含一個(gè)宏定義。該文一個(gè)成員都包含一個(gè)宏定義。該文 件必須是未匯編的源文件。宏名字件必須是未匯編的源文件。宏名字 和文件名必須相同,且宏文件名的和文件名必須相同,且宏文件名的 擴(kuò)展名必須是擴(kuò)展名必須是.asm 訪問宏庫訪問宏庫 用偽指令用偽指令.mlib來訪問宏庫,其語法為:來訪問宏庫,其語法為: .mlib macro library filename 當(dāng)匯編器識別到該偽指令時(shí),就打開當(dāng)匯編器識別到該偽指令時(shí),就打開 該宏庫,并建立該宏庫內(nèi)容的表該宏庫,并建立該宏庫內(nèi)容的表 TMS32

33、0C54x程序簡例程序簡例 v一個(gè)一個(gè)16位的二進(jìn)制數(shù)既可以表示一個(gè)整數(shù),也位的二進(jìn)制數(shù)既可以表示一個(gè)整數(shù),也 可以表示一個(gè)小數(shù)??梢员硎疽粋€(gè)小數(shù)。 v當(dāng)它表示一個(gè)整數(shù)時(shí),其最低位(當(dāng)它表示一個(gè)整數(shù)時(shí),其最低位(D0)表示)表示20, D1位表示位表示21,次高位(,次高位(D14)表示)表示214。 v如果表示一個(gè)有符號數(shù)時(shí),最高位(如果表示一個(gè)有符號數(shù)時(shí),最高位(D15)為)為 符號位,符號位,0表示正數(shù),表示正數(shù),1表示負(fù)數(shù)。表示負(fù)數(shù)。 v例如,例如,07FFFH表示最大的正數(shù)表示最大的正數(shù)32767(十進(jìn)(十進(jìn) 制),而制),而0FFFFH表示最大的負(fù)數(shù)表示最大的負(fù)數(shù)-1(負(fù)數(shù)用二(負(fù)

34、數(shù)用二 進(jìn)制的補(bǔ)碼方式顯示)。進(jìn)制的補(bǔ)碼方式顯示)。 TMS320C54x程序簡例程序簡例 v當(dāng)需要表示小數(shù)時(shí),小數(shù)點(diǎn)的位置始終在最高當(dāng)需要表示小數(shù)時(shí),小數(shù)點(diǎn)的位置始終在最高 位后,最高位(位后,最高位(D15)表示符號位。)表示符號位。 v次高位(次高位(D14)表示)表示2-1,然后是,然后是2-2,最低位,最低位 (D0)表示)表示2-15。 v 04000H表示小數(shù)表示小數(shù)0.5,01000H是小數(shù)是小數(shù)2-3 = 0.125, 0001H則表示則表示16位定點(diǎn)位定點(diǎn)DSP能表示的最小的小數(shù)能表示的最小的小數(shù) (有符號)(有符號) 2-15 = 0.000030517578125。 T

35、MS320C54x程序簡例程序簡例 v在在DSP中,一個(gè)中,一個(gè)16進(jìn)制的數(shù)可以表示不同的十進(jìn)制的數(shù)可以表示不同的十 進(jìn)制數(shù),或者是整數(shù),或者是小數(shù)(如果表示進(jìn)制數(shù),或者是整數(shù),或者是小數(shù)(如果表示 小數(shù),必定小于小數(shù),必定小于1),但僅僅是在做整數(shù)乘除),但僅僅是在做整數(shù)乘除 或小數(shù)乘除時(shí),系統(tǒng)對它們的處理才是有所區(qū)或小數(shù)乘除時(shí),系統(tǒng)對它們的處理才是有所區(qū) 別的,而在加減運(yùn)算時(shí),系統(tǒng)都當(dāng)成整數(shù)來處別的,而在加減運(yùn)算時(shí),系統(tǒng)都當(dāng)成整數(shù)來處 理。理。 v在后面的例子中,除非有特別說明,我們指的在后面的例子中,除非有特別說明,我們指的 都是有符號數(shù)。在都是有符號數(shù)。在C54X中,將一個(gè)小數(shù)用中,將

36、一個(gè)小數(shù)用16位定位定 點(diǎn)格式來表示的方法是用點(diǎn)格式來表示的方法是用215乘以該小數(shù),然后取乘以該小數(shù),然后取 整。整。 定點(diǎn)加法定點(diǎn)加法 temp3=temp1+temp2 ld temp1,a;變量;變量temp1裝入累加器裝入累加器A add temp2,a ;變量;變量temp2與累加器與累加器A相相 加,結(jié)果放入加,結(jié)果放入A中中 stl a,temp3;結(jié)果(低;結(jié)果(低16位)存入變位)存入變 量量temp3中。中。 v沒有特意考慮沒有特意考慮temp1和和temp2是整數(shù)還是是整數(shù)還是 小數(shù)小數(shù) 定點(diǎn)減法定點(diǎn)減法 stm #temp1,ar3;變量;變量temp1的地址的地址

37、裝入裝入ar3寄存器寄存器 stm #temp2,ar2;變量;變量temp2的地址的地址 裝入裝入ar2寄存器寄存器 sub *ar2, *ar3,b ;變量;變量temp2和和temp1 都左移都左移16位,然后相減,結(jié)果放入累加位,然后相減,結(jié)果放入累加 器器B中(高中(高16位)位) sth b,temp3 ;相減的結(jié)果(累加器;相減的結(jié)果(累加器B的的 高高16位)存入變量位)存入變量temp3。 定點(diǎn)整數(shù)乘法定點(diǎn)整數(shù)乘法 vC54X提供了大量的乘法運(yùn)算指令,其結(jié)提供了大量的乘法運(yùn)算指令,其結(jié) 果都是果都是32位,放在位,放在P寄存器中寄存器中 vMPYU是一條專用于無符號數(shù)乘法運(yùn)算

38、是一條專用于無符號數(shù)乘法運(yùn)算 的指令,而其它的乘法指令都是有符號數(shù)的指令,而其它的乘法指令都是有符號數(shù) 的乘法的乘法 定點(diǎn)整數(shù)乘法定點(diǎn)整數(shù)乘法 rsbx FRCT ;清;清FRCT標(biāo)志,準(zhǔn)備整數(shù)乘標(biāo)志,準(zhǔn)備整數(shù)乘 ld temp1,T;變量;變量temp1裝入裝入T寄存器寄存器 mpy temp2,a;temp2*temp1,結(jié)果放入,結(jié)果放入 累加器累加器A(32位)位) stha,temp3;結(jié)果的高;結(jié)果的高16位存入位存入temp3 stla,temp4;結(jié)果的低;結(jié)果的低16位存入位存入temp4 定點(diǎn)整數(shù)乘法定點(diǎn)整數(shù)乘法 v例例 temp1=1234H(十進(jìn)制的(十進(jìn)制的4660)

39、 temp2=9876H(十進(jìn)制的(十進(jìn)制的-26506) 乘法的結(jié)果在累加器乘法的結(jié)果在累加器A中為中為F8A343F8H( 十進(jìn)制的十進(jìn)制的-123517960) 定點(diǎn)小數(shù)乘法定點(diǎn)小數(shù)乘法 v由于兩個(gè)有符號的小數(shù)相乘,其結(jié)果的由于兩個(gè)有符號的小數(shù)相乘,其結(jié)果的 小數(shù)點(diǎn)的位置在次高的后面,所以必須小數(shù)點(diǎn)的位置在次高的后面,所以必須 左移一位,才能得到正確的結(jié)果。左移一位,才能得到正確的結(jié)果。C54X 中提供了一個(gè)狀態(tài)位中提供了一個(gè)狀態(tài)位FRCT,將其設(shè)置為,將其設(shè)置為 1時(shí),系統(tǒng)自動將乘積結(jié)果左移移位。時(shí),系統(tǒng)自動將乘積結(jié)果左移移位。 定點(diǎn)小數(shù)乘法定點(diǎn)小數(shù)乘法 ssbx FRCT;FRCT=

40、1,準(zhǔn)備小數(shù)乘法,準(zhǔn)備小數(shù)乘法 ld temp1,16,a ;temp1裝入裝入A的高的高16位位 mpyb temp2;temp2乘乘A的高的高16位,結(jié)位,結(jié) 果在果在B中,同時(shí)將中,同時(shí)將temp2裝入裝入T寄存器寄存器 sthb,temp3;將乘積的高;將乘積的高16位存位存temp3 定點(diǎn)小數(shù)乘法定點(diǎn)小數(shù)乘法 v例例 temp1=0ccdH(十進(jìn)制的(十進(jìn)制的0.1) temp2=0599aH(十進(jìn)制的(十進(jìn)制的0.7) 兩數(shù)相乘后兩數(shù)相乘后B累加器的內(nèi)容為累加器的內(nèi)容為08f5f0a4H(十(十 進(jìn)制的進(jìn)制的0.07000549323857) 如果僅保存結(jié)果的高如果僅保存結(jié)果的高1

41、6位位08f5H(十進(jìn)制的(十進(jìn)制的 0.06997680664063) 為了提高精度,可以使用為了提高精度,可以使用RND或使用或使用MPYR 指令對低指令對低16位做四舍五入的處理位做四舍五入的處理 定點(diǎn)整數(shù)除法定點(diǎn)整數(shù)除法 vC54X沒有提供專門的除法指令,一般有沒有提供專門的除法指令,一般有 兩種方法來完成除法。兩種方法來完成除法。 v使用乘法來代替,除以某個(gè)數(shù)相當(dāng)于乘以使用乘法來代替,除以某個(gè)數(shù)相當(dāng)于乘以 其倒數(shù),所以先求出其倒數(shù),然后相乘。其倒數(shù),所以先求出其倒數(shù),然后相乘。 這種方法對于除以常數(shù)特別適用。這種方法對于除以常數(shù)特別適用。 v使用使用SUBC指令,重復(fù)指令,重復(fù)16次

42、減法完成除法次減法完成除法 運(yùn)算。運(yùn)算。 v下面以下面以temp1/temp2為例,說明如何使用為例,說明如何使用 SUBC指令實(shí)現(xiàn)整數(shù)除法。指令實(shí)現(xiàn)整數(shù)除法。 定點(diǎn)整數(shù)除法定點(diǎn)整數(shù)除法 vtemp1被除數(shù),被除數(shù),temp2除數(shù),除數(shù),temp3商商 先判斷結(jié)果的符號,將兩數(shù)相乘,保存先判斷結(jié)果的符號,將兩數(shù)相乘,保存A或或B的的 高高16位以便判斷結(jié)果的符號。然后只做兩個(gè)正數(shù)位以便判斷結(jié)果的符號。然后只做兩個(gè)正數(shù) 的除法,最后修正結(jié)果的符號。的除法,最后修正結(jié)果的符號。 為了實(shí)現(xiàn)兩個(gè)數(shù)相除,先將被除數(shù)裝入為了實(shí)現(xiàn)兩個(gè)數(shù)相除,先將被除數(shù)裝入A或或B的的 低低16位,接著重復(fù)執(zhí)行位,接著重復(fù)執(zhí)行SUBC指令,用除數(shù)重復(fù)指令,用除數(shù)重復(fù) 減減16次后,除法運(yùn)算的商在累加器的低次后,除法運(yùn)算的商在累加器的低16位,余位,余 數(shù)在高數(shù)在高16位。位。 定點(diǎn)整數(shù)除法定點(diǎn)整數(shù)除法 ldtemp1,T;被除數(shù)裝入;被除數(shù)裝入T寄存器寄存器 mpy temp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論