基本算數(shù)運(yùn)算DSP試驗(yàn)報(bào)告_第1頁(yè)
基本算數(shù)運(yùn)算DSP試驗(yàn)報(bào)告_第2頁(yè)
基本算數(shù)運(yùn)算DSP試驗(yàn)報(bào)告_第3頁(yè)
基本算數(shù)運(yùn)算DSP試驗(yàn)報(bào)告_第4頁(yè)
基本算數(shù)運(yùn)算DSP試驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基本算數(shù)運(yùn)算一、實(shí)驗(yàn)?zāi)康暮鸵罅凇p、乘、除是數(shù)字信號(hào)處理中最基本的算術(shù)運(yùn)算。DSP中提供了大量的指令來(lái)實(shí)現(xiàn)這些功能。本實(shí)驗(yàn)學(xué)習(xí)使用定點(diǎn)DSP實(shí)現(xiàn)16位定點(diǎn)加、減、乘、除運(yùn)算的基本方法和編程技巧。本實(shí)驗(yàn)的演示文件為exerl.out。二、實(shí)驗(yàn)原理1)定點(diǎn)DSP中的數(shù)據(jù)表示方法2)實(shí)現(xiàn)16位定點(diǎn)加法ldtemp1,a;將變量tempi裝入寄存器Aaddtemp2,a;將變量temp2與寄存器A相加,結(jié)果放入A中stla,add_result;將結(jié)果(低16位)存入變量add_result中3)實(shí)現(xiàn)16位定點(diǎn)減法stm#temp1,ar3;將變量temp1的地址裝入ar3寄存器stm#temp3

2、,ar2;將變量temp3的地址裝入ar2寄存器sub*ar2+,*ar3,b;將變量temp3左移16位同時(shí)變量temp1也左移16位,然后相減,結(jié)果放入寄存器B(高16位)中,同時(shí)ar2加1。sthb,sub_result;將相減的結(jié)果(高16位)存入變量sub_result4)實(shí)現(xiàn)16位定點(diǎn)整數(shù)乘法rsbxFRCT;清FRCT標(biāo)志,準(zhǔn)備整數(shù)乘Idtemp1,T;將變量tempi裝入T寄存器mpytemp2,a;完成temp2*temp1,結(jié)果放入A寄存器(32位)5)實(shí)現(xiàn)16位定點(diǎn)小數(shù)乘法我們使用下列ssbxFRCT;FRCT=1,準(zhǔn)備小數(shù)乘法Idtemp1,16,a;將變量temp1裝

3、入寄存器A的高16位mpyatemp2;完成temp2乘寄存器A的高16位,結(jié)果在B中,同時(shí)將temp2裝入T寄存器sthb,mpy_f;將乘積結(jié)果的高16位存入變量mpy_f6)實(shí)現(xiàn)16位定點(diǎn)整數(shù)除法代碼如下:Idtemp1,T;將被除數(shù)裝入T寄存器mpytemp2,A;除數(shù)與被除數(shù)相乘,結(jié)果放入A寄存器Idtemp2,B;將除數(shù)temp2裝入B寄存器的低16位absB;求絕對(duì)值stlB,temp2;將B寄存器的低16位存回temp2Idtemp1,B;將被除數(shù)temp1裝入B寄存器的低16位absB;求絕對(duì)值rpt#15;重復(fù)SUBC指令16次subctemp2,b;使用SUBC指令完成除

4、法運(yùn)算bcddiv_end,agt;延時(shí)跳轉(zhuǎn),先執(zhí)行下面兩條指令,然后判斷A,若A>0,則跳轉(zhuǎn)到標(biāo)號(hào)div_end,結(jié)束除法運(yùn)算stlB,quot_i;將商(B寄存器的低16位)存入變量quot_isthB,remain_i;將余數(shù)(B寄存器的高16位)存入變量remain_ixorB;若兩數(shù)相乘的結(jié)果為負(fù),則商也應(yīng)為負(fù)。先將B寄存器清0subquot_i,B;將商反號(hào)stlB,quot_i;存回變量quot_i中div_end:7)實(shí)現(xiàn)16位定點(diǎn)小數(shù)除法代碼如下:ldtemp1,T;將被除數(shù)裝入T寄存器mpytemp2,A;除數(shù)與被除數(shù)相乘,結(jié)果放入A寄存器ldtemp2,B;將除數(shù)t

5、emp2裝入B寄存器的低16位absB;求絕對(duì)值stlB,temp2;將B寄存器的低16位存回temp2ldtemp1,16,B;將被除數(shù)temp1裝入B寄存器的高16位absB;求絕對(duì)值rpt#15;重復(fù)SUBC指令16次subctemp2,b;使用SUBC指令完成除法運(yùn)算and#0ffffh,B;將B寄存器的高16位清為0。這時(shí)余數(shù)被丟棄,僅保留商bcddiv_end,agt;延時(shí)跳轉(zhuǎn),先執(zhí)行下面兩條指令,然后判斷A,若A>0,則,跳轉(zhuǎn)到標(biāo)號(hào)div_end,結(jié)束除法運(yùn)算stlB,-1,quot_f;將商右移一位后存入變量quot_f,右移是為了修正符號(hào)位xorB;若兩數(shù)相乘的結(jié)果為負(fù)

6、,則商也應(yīng)為負(fù)。先將B寄存器清0subquot_f,B;將商反號(hào)stlB,quot_f;存回變量quot_f中div_end:三、實(shí)驗(yàn)內(nèi)容1)編寫(xiě)實(shí)驗(yàn)程序代碼本實(shí)驗(yàn)的匯編源程序代碼主要分為六個(gè)部分:加法、減法、整數(shù)乘法、小數(shù)乘法、整數(shù)除法和小數(shù)除法。每個(gè)部分后面都有一條需要加斷點(diǎn)的標(biāo)志語(yǔ)句:nop,當(dāng)執(zhí)行到這條加了斷點(diǎn)的語(yǔ)句時(shí),程序?qū)⒆詣?dòng)暫停。這時(shí)你可以通過(guò)存貯器窗口”檢查計(jì)算結(jié)果。當(dāng)然你看到的結(jié)果都是十六進(jìn)制的數(shù)。實(shí)驗(yàn)源程序請(qǐng)參見(jiàn)附錄。2)用ccssimulator調(diào)試運(yùn)行并觀(guān)察結(jié)果在完成實(shí)驗(yàn)程序代碼的輸入,并使用ccs進(jìn)行編譯并連接,得到out文件后,就可以在simulator上調(diào)試運(yùn)行。

7、步驟如下:a.啟動(dòng)ccssimulator。b.點(diǎn)擊file->loadprogram,找到exer1.out并裝入。這時(shí)可在反匯編窗口看到程序代碼。c.打開(kāi)“Memory®口,并在其中選擇要查看的存貯器地址段:0x0800x08e。d.在反匯編窗口中在每個(gè)“no曬令處都設(shè)一個(gè)斷點(diǎn),方法有兩種:1.用鼠標(biāo)雙擊該指令將其點(diǎn)亮即可。2.在菜單欄中選擇debug?breakpoint,然后在彈出的對(duì)話(huà)框中鍵入欲加斷點(diǎn)的地址即可(注意地址的格式)。e.單擊Run快捷鍵(或者F5按鈕),啟動(dòng)執(zhí)行基本算術(shù)運(yùn)算程序,程序在執(zhí)行完加法運(yùn)算后自動(dòng)暫停。通過(guò)registerwindow窗口可以看到

8、寄存器A的內(nèi)容為0x46,這正是加法運(yùn)算的結(jié)果。同樣,在Memory窗口中,可以看到0x81,0x82,0x88的內(nèi)容為分別為0012,0034,0x4$執(zhí)行加法運(yùn)算后,將0x81和0x82的內(nèi)容相加,結(jié)果放在0x88單元。f.在Memory窗口中用鼠標(biāo)左鍵雙擊0x81單元,這時(shí)可以修改該內(nèi)存單元的內(nèi)容。輸入新的數(shù)據(jù)0x0ffee(十進(jìn)制的-18),編輯內(nèi)容時(shí)請(qǐng)直接輸入FFEE(十六進(jìn)制),然后回車(chē)確認(rèn),便完成對(duì)0x81單元的修改。g在registerwindow窗口中修改PC值,方法也是鼠標(biāo)左鍵雙擊PC寄存器的內(nèi)容,輸入新的PC值0x1085(編輯內(nèi)容時(shí)直接輸入1805),并用回車(chē)鍵確認(rèn)。h

9、.單擊Run快捷鍵(或者F5按鈕),程序從當(dāng)前PC繼續(xù)運(yùn)行,重新計(jì)算0x81和0x82的和,結(jié)果在0x88中。當(dāng)程序再次暫停時(shí),可以看到A寄存器和0x88的內(nèi)容為0x22(十進(jìn)制的34),這正是我們希望的結(jié)果:-18+52=34。i.單擊“Run=F5S鈕,程序從當(dāng)前PC繼續(xù)運(yùn)行,完成減法運(yùn)算。當(dāng)程序再次暫停時(shí)(斷點(diǎn)位于0x1093),可以看到0x83和0x84單元的內(nèi)容分別為FFEE和0012,B寄存器的內(nèi)容為ffdc0000,而0x89的內(nèi)容為0xffdc(十進(jìn)制-36),這正是我們希望的結(jié)果:361818-=-。注意,該減法操作使用了輔助寄存器尋址,所以計(jì)算結(jié)果在B寄存器的高16位。j.

10、單擊Run快捷鍵(或者F5按鈕),程序從當(dāng)前PC繼續(xù)運(yùn)行,完成整數(shù)乘法運(yùn)算。當(dāng)程序再次暫時(shí)(斷點(diǎn)位于0x109d),可以看到0x81和0x82單元的內(nèi)容分別為0012和0034,A寄存器的內(nèi)容為000003A8,這正是我們希望的結(jié)果:18*52=936(0x3a8)。這時(shí)我們可以用1個(gè)16位的內(nèi)容單元來(lái)保存結(jié)果,如將A寄存器的低16位存入0x8b單元。但如果將0x81的內(nèi)容修改為0x2000(十進(jìn)制的8192),在registerwindow中將PC修改為1098,然后繼續(xù)運(yùn)行,重新計(jì)算乘法。當(dāng)程序完成乘法暫停時(shí),可以看到A寄存器的內(nèi)容為00068000,這也是一個(gè)正確的結(jié)果:8192*52=

11、425984(0x68000)。此時(shí)將無(wú)法用一個(gè)16位的存貯單元來(lái)保存A寄存器中的結(jié)果。k.單擊Run快捷鍵或者(F5按鈕),程序從當(dāng)前PC繼續(xù)運(yùn)行,完成小數(shù)乘法運(yùn)算。當(dāng)程序再次暫停時(shí)(斷點(diǎn)位于0x10A6),可以看到0x83和0x84單元的內(nèi)容分別為4000和b548,A寄存器的內(nèi)容為40000000,乘法的結(jié)果在B寄存器中為daa40000,這正是我們希望的結(jié)果:0.5*(-0.58374)=-0.29187(0x0daa4)對(duì)于小數(shù)乘法,一般情況都可以用1個(gè)16位的內(nèi)容單元將B寄存器的高16保存(如存入0x8c單元)。1.單擊Run快捷鍵(或者F5按鈕),程序從當(dāng)前PC繼續(xù)運(yùn)行,完成整數(shù)除法運(yùn)算。當(dāng)程序再次暫時(shí)(斷點(diǎn)位于0x10bb),可以看到0x81,0x82,0x8d和0x8e單元的內(nèi)容分別為0034,0012,FFFE和0010,這正是我們希望的結(jié)果:52除以-18,商為-2(0xfe),余數(shù)為16(0x10)。m.單擊Run快捷鍵(或者F

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論