實驗1基本算數(shù)運算_第1頁
實驗1基本算數(shù)運算_第2頁
實驗1基本算數(shù)運算_第3頁
實驗1基本算數(shù)運算_第4頁
實驗1基本算數(shù)運算_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、電子科技大學通信與信息工程學院標 準 實 驗 報 告(實驗)課程名稱 DSP設(shè)計與實現(xiàn) 電子科技大學教務處制表電 子 科 技 大 學實 驗 報 告一、實驗室名稱:DSP實驗室二、實驗項目名稱:基本算術(shù)運算三、實驗學時:4四、實驗原理:(1) 定點DSP中數(shù)據(jù)表示方法 C54X是16位的定點DSP。一個16位的二進制數(shù)既可以表示一個整數(shù),也可以表示一個小數(shù)。當它表示一個整數(shù)時,其最低位(D0)表示,D1位表示,次高位(D14)表示。如果表示一個有符號數(shù)時,最高位(D15)為符號位,0表示正數(shù),1表示負數(shù)。例如,07FFFH表示最大的正數(shù)32767(十進制),而0FFFFH表示最大的負數(shù)-1(負數(shù)

2、用2的補碼方式顯示)。當需要表示小數(shù)時,小數(shù)點的位置始終在最高位后,而最高位(D15)表示符號位。這樣次高位(D14)表示,然后是,最低位(D0)表示。所以04000H表示小數(shù)0.5,01000H表示小數(shù),而0001H表示16位定點DSP能表示的最小的小數(shù)(有符號)=0.000030517578125。在后面的實驗中,除非有特別說明,我們指的都是有符號數(shù)。在C54X中,將一個小數(shù)用16位定點格式來表示的方法是用乘以該小數(shù),然后取整。從上面的分析可以看出,在DSP中一個16進制的數(shù)可以表示不同的十進制數(shù),或者是整數(shù),或者是小數(shù)(如果表示小數(shù),必定小于1),但僅僅是在做整數(shù)乘除或小數(shù)乘除時,系統(tǒng)對

3、它們的處理才是有所區(qū)別的,而在加減運算時,系統(tǒng)都當成整數(shù)來處理。(2) 實現(xiàn)16定點加法 C54X中提供了多條用于加法的指令,如ADD,ADDC,ADDM和ADDS。其中ADDS用于無符號數(shù)的加法運算,ADDC用于帶進位的加法運算(如32位擴展精度加法),而ADDM專用于立即數(shù)的加法。ADD指令的尋址方式很多,其詳細使用說明請參考TMS320C54X實用教程。在本實驗中,我們使用下列代碼來說明加法運算:ldtemp1,a;將變量temp1裝入寄存器Aaddtemp2,a;將變量temp2與寄存器A相加,結(jié)果放入A中stla,add_result ;將結(jié)果(低16位)存入變量add_result

4、中。注意,這里完成計算temp3=temp1+temp2,我們沒有特意考慮temp1和temp2是整數(shù)還是小數(shù),在加法和下面的減法中整數(shù)運算和定點的小數(shù)運算都是一樣的。(3) 實現(xiàn)16位定點減法C54X中提供了多條用于減法的指令,如SUB,SUBB,SUBC和SUBS。其中SUBS用于無符號數(shù)的減法運算,SUBB用于帶進位的減法運算(如32位擴展精度的減法),而SUBC為移位減,DSP中的除法就是用該指令來實現(xiàn)的。SUB指令與ADD指令一樣,有許多的尋址方式,其詳細使用說明請參考TMS320C54X實用教程。在本實驗中,我們使用下列代碼來說明減法運算:stm#temp1,ar3;將變量temp

5、1的地址裝入ar3寄存器stm#temp3,ar2;將變量temp3的地址裝入ar3寄存器sub*ar2+, *ar3,b ;將變量temp3左移16位同時變量temp1也左移16位,然后;相減,結(jié)果放入寄存器B(高16位)中,同時ar2加1。sthb,sub_result;將相減的結(jié)果(高16位)存入變量sub_result。(4) 實現(xiàn)16定點整數(shù)乘法 在C54X中提供了大量的乘法運算指令,其結(jié)果都是32位,放在A或B寄存器中。乘數(shù)在C54X的乘法指令很靈活,可以是T寄存器、立即數(shù)、存貯單元和A或B寄存器的高16位。有關(guān)乘法指令的詳細使用說明請參考TMS320C54X實用教程。在C54X中

6、,一般對數(shù)據(jù)的處理都當做有符號數(shù),如果是無符號數(shù)乘時,請使用MPYU指令。這是一條專用于無符號數(shù)乘法運算的指令,而其它指令都是有符號數(shù)的乘法。在本實驗中,我們使用下列代碼來說明整數(shù)乘法運算:rsbxFRCT;清FRCT標志,準備整數(shù)乘ldtemp1,T;將變量temp1裝入T寄存器mpytemp2,a;完成temp2*temp1,結(jié)果放入A寄存器(32位)例如,當temp1=1234H(十進制的4660),temp2=9876H(十進制的-26506),乘法的結(jié)果在A寄存器中為0F8A343F8H(十進制的-123517960)。這是一個32位的結(jié)果,需要兩個內(nèi)存單元來存放結(jié)果:stha,mp

7、y_I_h;將結(jié)果(高16位)存入變量mpy_I_hstla,mpy_I_l;將結(jié)果(低16位)存入變量mpy_I_l當temp1=10H(十進制的16),temp2=05H(十進制的5),乘法結(jié)果在A寄存器中為00000050H(十進制的80)。對于這種情況,僅僅需要保存低16位即可:stla,mpy_I_l;將結(jié)果(低16位)存入變量mpy_I_l(5) 實現(xiàn)16定點小數(shù)乘法 在C54X中,小數(shù)的乘法與整數(shù)乘法基本一致,只是由于兩個有符號的小數(shù)相乘,其結(jié)果的小數(shù)點的位置在次高的后面,所以必須左移一位,才能得到正確的結(jié)果。C54X中提供了一個狀態(tài)位FRCT,將其設(shè)置為1時,系統(tǒng)自動將乘積結(jié)果

8、左移移位。但注意整數(shù)乘法時不能這樣處理,所以上面的實驗中一開始便將FRCT清除。兩個小數(shù)(16位)相乘后結(jié)果為32位,如果精度允許的話,可以只存高16位,將低16位丟棄,這樣仍可得到16位的結(jié)果。在本實驗中,我們使用下列代碼來說明小數(shù)乘法運算:ssbxFRCT;FRCT=1,準備小數(shù)乘法ldtemp1,16,a;將變量temp1裝入寄存器A的高16位mpyatemp2;完成temp2乘寄存器A的高16位,結(jié)果在B中,同時;將temp2裝入T寄存器sthb,mpy_f;將乘積結(jié)果的高16位存入變量mpy_f例如,temp1=temp2=4000H(十進制的0.5),兩數(shù)相乘后結(jié)果為2000000

9、0(十進制的=0.25)。再如,temp1=0ccdH(十進制的0.1),temp2=0599aH(十進制的0.7),兩數(shù)相乘后B寄存器的內(nèi)容為08f5f0a4H(十進制的0.07000549323857)。如果僅保存結(jié)果的高16位08f5H(十進制的0.06997680664063)。有時為了提高精度,可以使用RND或使用MPYR指令對低16位做四舍五入的處理。(6) 實現(xiàn)16定點整數(shù)除法 在C54X中沒有提供專門的除法指令,一般有兩種方法來完成除法。一種是用乘法來代替,除以某個數(shù)相當于乘以其倒數(shù),所以先求出其倒數(shù),然后相乘。這種方法對于除以常數(shù)特別適用。另一種方法是使用SUBC指令,重復1

10、6次減法完成除法運算。下面我們以temp1/temp2為例,說明如何使用SUBC指令實現(xiàn)整數(shù)除法。其中變量temp1為被除數(shù),temp2為除數(shù),結(jié)果即商存放在變量temp3中。在完成整數(shù)除法時,先判斷結(jié)果的符號。方法是將兩數(shù)相乘,保存A或B的高16位以便判斷結(jié)果的符號。然后只做兩個正數(shù)的除法,最后修正結(jié)果的符號。為了實現(xiàn)兩個數(shù)相除,先將被除數(shù)裝入A或B的低16位,接著重復執(zhí)行SUBC指令,用除數(shù)重復減16次后,除法運算的商在累加器的低16位,余數(shù)在高16位。詳細代碼如下:ldtemp1,T;將被除數(shù)裝入T寄存器mpytemp2,A;除數(shù)與被除數(shù)相乘,結(jié)果放入A寄存器ldtemp2,B;將除數(shù)t

11、emp2裝入B寄存器的低16位absB;求絕對值stlB,temp2;將B寄存器的低16位存回temp2ldtemp1,B;將被除數(shù)temp1裝入B寄存器的低16位absB;求絕對值rpt#15;重復SUBC指令16次subctemp2,b;使用SUBC指令完成除法運算bcddiv_end,agt;延時跳轉(zhuǎn),先執(zhí)行下面兩條指令,然后判斷A,若A0,則;跳轉(zhuǎn)到標號div_end,結(jié)束除法運算stlB,quot_i;將商(B寄存器的低16位)存入變量quot_isthB,remain_i;將余數(shù)(B寄存器的高16位)存入變量remain_ixorB;若兩數(shù)相乘的結(jié)果為負,則商也應為負。先將B寄存器

12、清0subquot_i,B;將商反號stlB,quot_i;存回變量quot_i中div_end:上面給出的是整數(shù)除法的通用程序,在實際應用中可以根據(jù)具體情況做簡化。如正數(shù)除法可以直接將被除數(shù)temp1裝入B寄存器的低16位,然后用SUBC指令循環(huán)減除數(shù)temp2,減完后B寄存器中低16位為商,高16位為余數(shù),不用判斷符號,從而節(jié)省時間。例如temp1=10H(十進制的16),temp2=5,兩數(shù)相除后商為3(在B寄存器的低16位),余數(shù)為1(在B寄存器的高16位)。(7) 實現(xiàn)16定點小數(shù)除法 在C54X中實現(xiàn)16位的小數(shù)除法與前面的整數(shù)除法基本一致,也是使用循環(huán)的SUBC指令來完成。但有兩

13、點需要注意:第一,小數(shù)除法的結(jié)果一定是小數(shù)(小于1),所以被除數(shù)一定小于除數(shù)。這與整數(shù)除法正好相反。所以在執(zhí)行SUBC指令前,應將被除數(shù)裝入A或B寄存器的高16位,而不是低16位。其結(jié)果的格式與整數(shù)除法一樣,A或B寄存器的高16位為余數(shù),低16位為商。第二,與小數(shù)乘法一樣,應考慮符號位對結(jié)果小數(shù)點的影響。所以應對商右移一位,得到正確的有符號數(shù)。其詳細代碼如下:ldtemp1,T;將被除數(shù)裝入T寄存器mpytemp2,A;除數(shù)與被除數(shù)相乘,結(jié)果放入A寄存器ldtemp2,B;將除數(shù)temp2裝入B寄存器的低16位absB;求絕對值stlB,temp2;將B寄存器的低16位存回temp2ldtem

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

15、d: 注意,上面的C54X的16位定點有符號小數(shù)除法通用程序沒有保留余數(shù),商保存在變量temp3中。舉一個例子,當temp1=2cccH(十進制的0.35),temp2=55c2H(十進制的0.67),兩數(shù)相除的結(jié)果為temp3=42dcH(十進制的0x42dc0.52233)。五、實驗目的:用定點DSP實現(xiàn)16位定點加、減、乘、除運算的基本方法和編程技巧。六、實驗內(nèi)容: 本實驗需要使用C54X匯編語言實現(xiàn)加、減、乘、除的基本運算,并通過DES的存貯器顯示窗口觀察結(jié)果。實驗分兩步完成:(1).編寫實驗程序代碼本實驗的匯編源程序代碼主要分為六個部分:加法、減法、整數(shù)乘法、小數(shù)乘法、整數(shù)除法和小數(shù)

16、除法。每個部分后面都有一條需要加斷點的標志語句:nop當執(zhí)行到這條加了斷點的語句時,程序?qū)⒆詣訒和?。這時你可以通過“存貯器窗口”檢查計算結(jié)果。當然你看到的結(jié)果都是十六進制的數(shù)。實驗源程序請參見第5部分。 (2).在simulator上調(diào)試運行,并觀察結(jié)果 七、實驗器材(設(shè)備、元器件):Windows7系統(tǒng)計算機,CCS軟件3.3版本八、實驗步驟:在完成實驗程序代碼的輸入,并使用匯編批處理ASM.BAT進行編譯并連接后,就可以在simulator上調(diào)試運行。步驟如下: a. 啟動simulator實驗系統(tǒng)軟件sim54Xw.exe。b. 在調(diào)試界面的左下腳命令行欄輸入load exer1.out

17、,或單擊菜單欄下面的“Load”選項,并在彈出的File Name對話框中鍵入exer1.out裝入基本算術(shù)運算實驗程序,這時應能在“反匯編”窗口看到程序代碼。c. 用鼠標選中“Memory”窗口,并在其中選擇要查看的存貯器地址段:0x0800x08e。d. 在反匯編窗口中在每個“nop”指令處都設(shè)一個斷點,方法有兩種:1.用鼠標單擊該指令將其點亮即可。2.在菜單欄中選擇“Break”Add”,然后在彈出的對話框中鍵入欲加斷點的地址即可。e. 單擊菜單欄下的“Run=F5”按鈕,啟動執(zhí)行基本算術(shù)運算程序,程序在執(zhí)行完加法運算后自動暫停。通過“CPU”窗口可以看到寄存器AHL的內(nèi)容為0x46,這

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

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

20、當前PC繼續(xù)運行,完成整數(shù)乘法運算。當程序再次暫時(斷點位于0x181d),可以看到0x81和0x82單元的內(nèi)容分別為0012和0034,A寄存器的內(nèi)容為000003A8,這正是我們希望的結(jié)果:18*52=936(0x3a8)。這時我們可以用1個16位的內(nèi)容單元來保存結(jié)果,如將A寄存器的低16位存入0x8b單元。但如果將0x81的內(nèi)容修改為0x2000(十進制的8192),在“CPU窗口”中將PC修改為1818,然后繼續(xù)運行,重新計算乘法。當程序完成乘法暫停時,可以看到A寄存器的內(nèi)容為00068000,這也是一個正確的結(jié)果:8192*52=425984(0x68000)。此時將無法用一個16位

21、的存貯單元來保存A寄存器中的結(jié)果。 k. 單擊“Run=F5”按鈕,程序從當前PC繼續(xù)運行,完成小數(shù)乘法運算。當程序再次暫停時(斷點位于0x1826),可以看到0x83和0x84單元的內(nèi)容分別為4000和b548,A寄存器的內(nèi)容為40000000,乘法的結(jié)果在B寄存器中為daa40000,這正是我們希望的結(jié)果:0.5*(-0.58374)=-0.29187(0x0daa4)。對于小數(shù)乘法,一般情況都可以用1個16位的內(nèi)容單元將B寄存器的高16保存(如存入0x8c單元)。 l. 單擊“Run=F5”按鈕,程序從當前PC繼續(xù)運行,完成整數(shù)除法運算。當程序再次暫時(斷點位于0x183b),可以看到0x81,0x82,0x8d和0x8e單元的內(nèi)容分別為0034,0012,FFFE和0010,這正是我們希望的結(jié)果:52除以-18,商為-2(0xfffe) ,余數(shù)為16(0x10)。 m. 單擊“Run=F5”按鈕,程序從當前PC繼續(xù)運行,完成小數(shù)除法運算。當程序再次暫停時(斷點位于0x1852),可以看到0x81,0x82和0x8f單元的內(nèi)容分別為4000,4ab8和6da3,這正是我們希望的結(jié)果:0.5/0.58374=0.8565457(0x6da3)。 n. 如果以上程序運行不正確,請檢查代碼是否輸入正確,還可以在源代碼中插入斷點調(diào)試,注意對中間結(jié)果的觀察。八、思考題(1)在減法

溫馨提示

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

評論

0/150

提交評論