14第五章匯編語(yǔ)言編程_第1頁(yè)
14第五章匯編語(yǔ)言編程_第2頁(yè)
14第五章匯編語(yǔ)言編程_第3頁(yè)
14第五章匯編語(yǔ)言編程_第4頁(yè)
14第五章匯編語(yǔ)言編程_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章 DSP匯編語(yǔ)言編程5.1 程序的控制與轉(zhuǎn)移1、利用BANZ指令進(jìn)行循環(huán)操作 在程序設(shè)計(jì)時(shí),經(jīng)常需要重復(fù)執(zhí)行某一段程序。這時(shí)可以利用BANZ(指定輔助寄存器不為0時(shí)轉(zhuǎn)移)指令來(lái)實(shí)現(xiàn)。 例5-1 主要程序如下: .mmregs.bss x, 5 ;為變量x預(yù)留5個(gè)單元存儲(chǔ)空間.bss y, 1 ;為變量y預(yù)留1個(gè)單元存儲(chǔ)空間STM #x, AR1 ;將x變量的首地址存到AR1中STM #4, AR2 ;將(累加次數(shù)-1)放在AR2中 STM #y, AR3LD #0, A ;累加器A清0 loop: ADD *AR1+, A ;把AR1內(nèi)容為地址的數(shù)據(jù)加到累加器A ;AR1內(nèi)容加1BANZ

2、 loop,*AR2- ;如果AR2不為0跳轉(zhuǎn)到loop執(zhí)行 ; AR2內(nèi)容減1STLA, *AR3 ;如果AR2=0,執(zhí)行該指令,將A (15-0)存 ;到單元y中。2、利用CMPR指令進(jìn)行比較操作 在設(shè)計(jì)程序時(shí),有時(shí)需要進(jìn)行數(shù)據(jù)與數(shù)據(jù)的比較,C54x具有專門的比較指令CMPR。CMPR是測(cè)試所規(guī)定的輔助寄存器(AR1-AR7)與AR0的比較結(jié)果,如果所給定的測(cè)試條件成立,則 TC位置1。然后驅(qū)動(dòng)條件分支轉(zhuǎn)移指令。這時(shí)所有比較的數(shù)據(jù)都是無(wú)符號(hào)操作數(shù)。 例5-2 比較操作后條件分支轉(zhuǎn)移 指定的ARx寄存器(x=1-7)與AR0比較,測(cè)試條件成立,TC置1 .mmregs STM #5, AR1

3、 ;立即數(shù)5存到AR1中 STM #10, AR0 ;立即數(shù)10存到AR0中 loop: MAR *AR1+ ;修改AR1的內(nèi)容,使(AR1)+1 CMPR LT, AR1 ;如果AR1sp,SP減1后壓入數(shù)據(jù) ; (pc)+2-TOS ,CALL指令字長(zhǎng)是兩個(gè)字,其下面 ;跟著的返回地址是PC+2,所以把 PC+2壓入棧頂。 ;pmad-pc 轉(zhuǎn)到pmad地址執(zhí)行RET ;(TOS)-PC, (SP)+1-SP 自定義的未初始化段“預(yù)留堆棧區(qū)STACK”究竟定位在哪個(gè)存儲(chǔ)區(qū)需要在連接命令文件中規(guī)定:5.3 加、減法和乘法運(yùn)算 在數(shù)字信號(hào)處理中,乘法和加減法運(yùn)算是非常普遍的,本節(jié)將舉例說(shuō)明此類

4、程序的編寫方法。例5-4 計(jì)算z=x + y - w例5-5 計(jì)算y= mx + b(求解直線方程) 將m送到T寄存器,計(jì)算mx的乘積,然后再加上b。例5-6 計(jì)算 y=x1*a1+x2*a2 前面幾個(gè)例子說(shuō)明了加、減法,求解直線方程和簡(jiǎn)單乘法是怎樣實(shí)現(xiàn)的,所有的指令都是單周期指令。例5-7 求 的四項(xiàng)中的最大值,并放在累加器A中例5-8 求 的四項(xiàng)中的最大值,并存入指定的存儲(chǔ)單元中。 5.4 重復(fù)操作 上面提到過(guò)BANZ,如果當(dāng)前輔助寄存器ARx不為0則轉(zhuǎn)移,是一條很好用的循環(huán)操作指令。DSP還有專門的重復(fù)操作指令使程序的運(yùn)行更快。 RPT(重復(fù)執(zhí)行下條指令) RPTZ(累加器清0,并重復(fù)下

5、條指令) RPTB(塊重復(fù)指令)1、單條指令重復(fù)執(zhí)行 * 重復(fù)指令只需取指一次,進(jìn)行循環(huán)比BANZ效率高 * 可以重復(fù)執(zhí)行n次,指令中計(jì)數(shù)值設(shè)為n-1 * 重復(fù)操作使多周期指令(MAC(1-2)、MVDK(2)和MVPD(3)等)變成單周期指令 * 重復(fù)操作期間,CPU不響應(yīng)中斷(RS除外),當(dāng)HM=0時(shí),遇到HOLD信號(hào),CPU會(huì)繼續(xù)重復(fù)操作。例5-9 對(duì)一個(gè)數(shù)組進(jìn)行初始化2、 程序塊重復(fù)執(zhí)行 * 程序塊重復(fù)操作指令RPTB(4)將重復(fù)操作的范 圍擴(kuò)大到任意長(zhǎng)度的循環(huán)回路,循環(huán)開(kāi)銷為0 * 循環(huán)起始地址(RSA)就是RPTB指令的下一行地 址,循環(huán)結(jié)束地址(REA)由RPTB指令的操作數(shù) 規(guī)

6、定 * 塊重復(fù)操作前,必須先將迭代次數(shù)加載到BRC (塊重復(fù)計(jì)數(shù)器) * RPTB指令可以響應(yīng)中斷程序塊重復(fù)執(zhí)行例5-10 對(duì)數(shù)組x5的每一個(gè)元素都加15.5 數(shù)據(jù)塊的傳送C54x有10條數(shù)據(jù)傳送指令:EAR尋址DAR尋址C54x數(shù)據(jù)傳送指令的特點(diǎn)如下: 傳送速度比加載和存儲(chǔ)指令要快; 傳送數(shù)據(jù)不需要通過(guò)累加器; 可以尋址程序存儲(chǔ)器; 與RPT指令相結(jié)合(重復(fù)時(shí),這些指令都變成單周 期指令)實(shí)現(xiàn)數(shù)據(jù)塊傳送。例5-11 數(shù)據(jù)塊傳送的匯編程序5.6 雙操作數(shù)乘法 C54x片內(nèi)的多總線結(jié)構(gòu),允許在一個(gè)機(jī)器周期內(nèi)通過(guò)兩個(gè)16位數(shù)據(jù)總線尋址兩個(gè)數(shù)據(jù)或系數(shù)。1、雙操作數(shù)運(yùn)算的特點(diǎn): * 單周期內(nèi)通過(guò)C總線

7、和D總線尋址兩個(gè)數(shù)據(jù) * 用間接尋址方式獲得操作數(shù),且只能用AR2AR5 * 占用程序空間小 * 運(yùn)行速度快2、雙操作數(shù)乘法指令規(guī)定了一個(gè)程序存儲(chǔ)器絕對(duì)地址,指令多一個(gè)字,執(zhí)行時(shí)間需要3個(gè)周期N為循環(huán)迭代次數(shù),單操作數(shù)運(yùn)算塊循環(huán)需要3N個(gè)周期 雙操作數(shù)運(yùn)算塊循環(huán)需要2N個(gè)周期所以迭代次數(shù)越多,節(jié)省的機(jī)器周期數(shù)也越多3、雙操作數(shù)乘法編程與優(yōu)化 例5-13:編制求解 的程序段 單操作數(shù)運(yùn)算 雙操作數(shù)運(yùn)算例5-13的優(yōu)化: 例5-13中,利用了雙操作數(shù)指令進(jìn)行乘累加運(yùn)算,完成N項(xiàng)乘累加需要2N個(gè)機(jī)器周期。如果將硬件乘加器單元、多總線和循環(huán)操作結(jié)合在一起,可以形成一個(gè)優(yōu)化的乘累加程序。完成一個(gè)N項(xiàng)乘累

8、加的操作,只需要N+2個(gè)機(jī)器周期。5.7 長(zhǎng)字運(yùn)算與并行運(yùn)算1、長(zhǎng)字運(yùn)算 C54x有5條指令用來(lái)完成32位長(zhǎng)操作數(shù)的運(yùn)算: 長(zhǎng)操作數(shù)在存儲(chǔ)器的排列方法 在長(zhǎng)字指令中,“DST src, Lmem” 每次存儲(chǔ)一個(gè)32位數(shù)要用E總線2次,需要2個(gè)機(jī)器周期;其他指令都是單字單周期指令,在一個(gè)周期內(nèi)同時(shí)利用C總線和D總線,得到32位操作數(shù)。 長(zhǎng)操作數(shù)指令中的一個(gè)重要問(wèn)題,就是高16位和低16位操作數(shù)在存儲(chǔ)器中的排列問(wèn)題。 指令中給出的存取地址總是指操作數(shù)的高16位。 長(zhǎng)操作數(shù)在存儲(chǔ)器的排列方法有兩種: * 偶地址排列法-高字節(jié)加1尋址低字節(jié) * 奇地址排列法-高字節(jié)減1尋址低字節(jié)偶地址排列法和奇地址排

9、列法的區(qū)別: 對(duì)于數(shù)據(jù)6CACBD90h,如果指令中給出的 地址是0100h 偶地址排列法 0100h 存放數(shù)據(jù) 6CACh 0101h 存放數(shù)據(jù)BD90h 奇地址排列法 00FFh 存放數(shù)據(jù)BD90h 0100h 存放數(shù)據(jù)6CACh建議采用偶地址排列法偶地址對(duì)齊(C54x 的.long和 .float命令自動(dòng)實(shí)現(xiàn)偶地址對(duì)齊)雙精度變量的定義:.bss symbol, size in word ,blocking flag ,alignment flag.bss 為symbol預(yù)留存儲(chǔ)空間;symbol 段標(biāo)號(hào),指向該段第一個(gè)單元地址; size in word 預(yù)留存儲(chǔ)空間大小;blocking flag 如果非0,匯編器將size連續(xù)排放,保留空間不會(huì)跨越數(shù)據(jù) 頁(yè)邊界;alignment flag 如果非0,匯編器按照長(zhǎng)字偶地址對(duì)齊來(lái)分配size個(gè)字。例5-14:長(zhǎng)字運(yùn)算與標(biāo)準(zhǔn)運(yùn)算的比較計(jì)算: z32 = x32 + y322、并行運(yùn)算 C54x能夠同時(shí)利用D總線和E總線實(shí)現(xiàn)并行運(yùn)算,其中D總線用來(lái)執(zhí)行加載或算術(shù)運(yùn)算,E總線用來(lái)保存先前的結(jié)果。 并行運(yùn)算的指令有4種

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論