版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、DSPDSP原理與應(yīng)用原理與應(yīng)用第第7章章 應(yīng)用程序設(shè)計(jì)應(yīng)用程序設(shè)計(jì)1n任課教師:n網(wǎng)站: http:/ http:/nTMS320C55x Assembly Language Tools Users Guide (SPRU280H, 2002年年)nTMS320C55x DSP Mnemonic Instruction Set Reference Guide (SPRU374G, 2002年年)2第第7章章 應(yīng)用程序設(shè)計(jì)應(yīng)用程序設(shè)計(jì)內(nèi)容提要:內(nèi)容提要:n7.1 定標(biāo)與溢出處理定標(biāo)與溢出處理n7.2 基礎(chǔ)算術(shù)運(yùn)算基礎(chǔ)算術(shù)運(yùn)算n7.3 FIR濾波器濾波器n7.4 IIR濾波器濾波器n7.5 快速
2、傅里葉變換快速傅里葉變換(FFT)n7.6 DSPLIB的使用的使用37.1定標(biāo)與溢出處理定標(biāo)與溢出處理n7.1.1 數(shù)的定標(biāo)數(shù)的定標(biāo)n7.1.2 溢出的處理方法溢出的處理方法n7.1.3 常用信號處理算法中的定標(biāo)方法常用信號處理算法中的定標(biāo)方法47.1.1 數(shù)的定標(biāo)數(shù)的定標(biāo)l小數(shù)定標(biāo)小數(shù)定標(biāo)的概念的概念u設(shè)定一個(gè)設(shè)定一個(gè)16位數(shù)的小數(shù)點(diǎn)處于該數(shù)中的哪一位位數(shù)的小數(shù)點(diǎn)處于該數(shù)中的哪一位;u可以表示不同大小和不同精度的小數(shù)可以表示不同大小和不同精度的小數(shù);lQ表示法表示法u表表7-1列出了一個(gè)列出了一個(gè)16位數(shù)的位數(shù)的16種種Q表示表示及它們及它們所能表示的十進(jìn)制數(shù)值范圍。所能表示的十進(jìn)制數(shù)值范
3、圍。5計(jì)算機(jī)有兩種數(shù)據(jù)表示方法:計(jì)算機(jī)有兩種數(shù)據(jù)表示方法: 定點(diǎn)數(shù)定點(diǎn)數(shù)表示法表示法 浮點(diǎn)數(shù)浮點(diǎn)數(shù)表示法表示法定點(diǎn)數(shù)定點(diǎn)數(shù)就是小數(shù)點(diǎn)位置固定的數(shù)。數(shù)據(jù)的表示形式是:就是小數(shù)點(diǎn)位置固定的數(shù)。數(shù)據(jù)的表示形式是:67.1.1 數(shù)的定標(biāo)數(shù)的定標(biāo) 符號位符號位 整數(shù)部分整數(shù)部分. .小數(shù)部分小數(shù)部分C55x DSPC55x DSP是定點(diǎn)芯片是定點(diǎn)芯片,采用補(bǔ)碼形式來表示無符號,采用補(bǔ)碼形式來表示無符號數(shù)和有符號數(shù)。數(shù)和有符號數(shù)。 CPU在執(zhí)行指令時(shí),并不知道處理的數(shù)據(jù)是整數(shù)在執(zhí)行指令時(shí),并不知道處理的數(shù)據(jù)是整數(shù)還是小數(shù),也不能指出小數(shù)點(diǎn)的位置。在編程時(shí)必還是小數(shù),也不能指出小數(shù)點(diǎn)的位置。在編程時(shí)必須由程
4、序員須由程序員指出一個(gè)數(shù)的小數(shù)點(diǎn)處于哪一位指出一個(gè)數(shù)的小數(shù)點(diǎn)處于哪一位,這就,這就是是定標(biāo)定標(biāo)(scale)的概念。的概念。 常用的定標(biāo)方法是常用的定標(biāo)方法是Q表示法表示法, Q表示法用表示法用Q0, Q1, Qi, , Q15 分別表示小數(shù)點(diǎn)在分別表示小數(shù)點(diǎn)在D0位之后位之后、D1位之位之后、后、Di位之后、位之后、D15位之后位之后。 77.1.1 數(shù)的定標(biāo)數(shù)的定標(biāo)嚴(yán)格地嚴(yán)格地, 是是Qm.n 格式格式: n位小數(shù)位小數(shù), m位整數(shù)位整數(shù), 1位位符符號位號位, 共共m+n+1位二進(jìn)制數(shù)。位二進(jìn)制數(shù)。 也稱也稱S表示法表示法Sm.n Q表示表示 小數(shù)點(diǎn)位置小數(shù)點(diǎn)位置整數(shù)位整數(shù)位 小數(shù)位小數(shù)
5、位十進(jìn)制表示范圍十進(jìn)制表示范圍精度精度-冪冪Q15在在D15之后之后015-10.99996952 -158Q13在在D13之后之后213-43.99987792 -13Q12在在D12之后之后312-87.99975592 -12Q11在在D11之后之后411-1615.99951172 -11Q10在在D10之后之后510-3231.99902342 -10Q9在在D9之后之后69-6463.998043752 -9Q8在在D8之后之后78-128127.99609382 -8Q7在在D7之后之后87-256255.99218752 -7Q6在在D6之后之后96-512511.980437
6、52 -6Q5在在D5之后之后105-10241023.968752 -5Q4在在D4之后之后114-20482047.93752 -4Q3在在D3之后之后123-40964095.8752 -3Q2在在D2之后之后132-81928191.752 -2Q1在在D1之后之后141-1638416383.52 -1Q0在在D0之后之后150-32768367672 0Q14在在D14之后之后114-21.99993902 -14表7-1 Q表示及數(shù)值范圍表表7-1 Q表示及數(shù)值范圍表示及數(shù)值范圍Q表示十進(jìn)制數(shù)X表示范圍Q15-1X0.9999695Q14-2X1.9999390Q13-4X3.9
7、998779Q12-8X7.9997559Q11-16X15.9995117Q10-32X31.9990234Q9-64X63.9980469Q8-128X127.9960938Q7-256X255.9921875Q6-512X511.9804375Q5-1024X1023.96875Q4-2048X2047.9375Q3-4096X4095.875Q2-8192X8191.75Q1-16384X16383.5Q0-32768X327679l不同的不同的Q所表示的數(shù)不僅范圍不同所表示的數(shù)不僅范圍不同, 而且精度也不相同而且精度也不相同:uQ越大越大, 數(shù)值范圍越小數(shù)值范圍越小, 但精度越高但精
8、度越高;uQ越小越小, 數(shù)值范圍越大數(shù)值范圍越大,但精度就越低但精度就越低;例如例如: Q0數(shù)值范圍是數(shù)值范圍是-32768到到+32767,其精度為其精度為1; Q15的數(shù)值范圍為的數(shù)值范圍為-1到到0.9999695, 精度為精度為 1/32768 = 0.00003051對定點(diǎn)數(shù)而對定點(diǎn)數(shù)而言言, , 數(shù)數(shù)值范圍與精度是一對矛盾。一個(gè)變量值范圍與精度是一對矛盾。一個(gè)變量要想能夠表示比較大的數(shù)值范要想能夠表示比較大的數(shù)值范圍圍, , 必必須以犧牲精度為代須以犧牲精度為代價(jià)價(jià); ; 而而想提高精想提高精度度, , 則則數(shù)的表示范圍就相應(yīng)地減小數(shù)的表示范圍就相應(yīng)地減小。在在實(shí)際的定點(diǎn)算法中,應(yīng)
9、該根據(jù)具體問題進(jìn)行折衷處實(shí)際的定點(diǎn)算法中,應(yīng)該根據(jù)具體問題進(jìn)行折衷處理理, , 以達(dá)到最佳效果。以達(dá)到最佳效果。10l在在C55x中中, 16位整數(shù)采用補(bǔ)碼形式表示。每個(gè)采用位整數(shù)采用補(bǔ)碼形式表示。每個(gè)采用Qi定標(biāo)定標(biāo)的的16位數(shù)用位數(shù)用1個(gè)符號位、個(gè)符號位、i個(gè)小數(shù)位和個(gè)小數(shù)位和15-i個(gè)整數(shù)位來表示個(gè)整數(shù)位來表示。11.表表7-2 同樣的數(shù)在不同定標(biāo)方式下所表示的具體數(shù)值同樣的數(shù)在不同定標(biāo)方式下所表示的具體數(shù)值l同樣一個(gè)同樣一個(gè)16位數(shù),位數(shù),若小數(shù)點(diǎn)設(shè)定的位置不同若小數(shù)點(diǎn)設(shè)定的位置不同,它,它所表示的數(shù)也就不同。所表示的數(shù)也就不同。Q格式 十六進(jìn)制數(shù)二進(jìn)制數(shù)十進(jìn)制數(shù)Q02000H0010
10、 0000 0000 0000b8192Q142000H0010 0000 0000 0000b0.5Q152000H0010 0000 0000 0000b0.25Q0E000H1110 0000 0000 0000b-8192Q14E000H1110 0000 0000 0000b-0.5Q15E000H1110 0000 0000 0000b-0.2512定標(biāo)不同定標(biāo)不同.7.1定標(biāo)與溢出處理定標(biāo)與溢出處理n7.1.1 數(shù)的定標(biāo)數(shù)的定標(biāo)n7.1.2 溢出的處理方法溢出的處理方法n7.1.3 常用信號處理算法中的定標(biāo)方法常用信號處理算法中的定標(biāo)方法137.1.2 溢出的處理方法溢出的處理方
11、法l如果算術(shù)運(yùn)算結(jié)果超出寄存器所能表示的最大如果算術(shù)運(yùn)算結(jié)果超出寄存器所能表示的最大數(shù)就會出現(xiàn)溢出數(shù)就會出現(xiàn)溢出;u因?yàn)橐驗(yàn)?6位定點(diǎn)位定點(diǎn)DSP的動(dòng)態(tài)范圍有限,所以在使的動(dòng)態(tài)范圍有限,所以在使用時(shí)必須注意動(dòng)態(tài)范圍以防溢出用時(shí)必須注意動(dòng)態(tài)范圍以防溢出;l溢出還與輸入信號的特性和運(yùn)算法則有關(guān)溢出還與輸入信號的特性和運(yùn)算法則有關(guān) 。1. 溢出溢出14 C55x有以下幾種硬件特性可以處理溢出:有以下幾種硬件特性可以處理溢出:l保護(hù)位保護(hù)位 C55x的每個(gè)的每個(gè)累加器都有累加器都有8個(gè)保護(hù)位個(gè)保護(hù)位(3932位位),允許連續(xù)允許連續(xù)256次乘加操作而累加器不溢出次乘加操作而累加器不溢出;l溢出標(biāo)志位溢
12、出標(biāo)志位 C55x的每個(gè)的每個(gè)累加器都有相關(guān)的溢出標(biāo)志位累加器都有相關(guān)的溢出標(biāo)志位, 當(dāng)累當(dāng)累加器操作結(jié)果出現(xiàn)溢出時(shí)加器操作結(jié)果出現(xiàn)溢出時(shí),這個(gè)標(biāo)志位就會置位。這個(gè)標(biāo)志位就會置位。2. C55x的溢出處理機(jī)制的溢出處理機(jī)制15M40=1l飽和方式位飽和方式位SATD和和SATAuSATD控制控制D單元的操作單元的操作, SATA控制控制A單元的操作。單元的操作。u若若SATD=1, 當(dāng)當(dāng)D單元發(fā)生溢出時(shí)單元發(fā)生溢出時(shí), 對對D單元結(jié)果進(jìn)單元結(jié)果進(jìn)行行飽和處理飽和處理。不管飽和方式位值是什么。不管飽和方式位值是什么, 當(dāng)累加器發(fā)當(dāng)累加器發(fā)生溢出時(shí)生溢出時(shí), 相應(yīng)溢出標(biāo)志位相應(yīng)溢出標(biāo)志位(ACOV
13、x)都會被置位都會被置位;uA單元沒有溢出標(biāo)志位單元沒有溢出標(biāo)志位, 但如果但如果SATA=1, 發(fā)生溢出發(fā)生溢出時(shí)時(shí), 結(jié)果也會結(jié)果也會進(jìn)行飽和處理進(jìn)行飽和處理。 飽和處理是用飽和處理是用最近的邊界值最近的邊界值代替溢出結(jié)果。代替溢出結(jié)果。例例, 16, 16位寄存位寄存器范器范圍是圍是8000h(8000h(最最小負(fù)小負(fù)數(shù)數(shù)) )7FFFh(7FFFh(最最大正大正數(shù)數(shù)), ), 飽飽和處理就和處理就是是: : 用用7FFFh7FFFh代替比代替比7FFFh7FFFh大的結(jié)大的結(jié)果果; ; 用用8000h8000h代替比代替比8000h8000h小的結(jié)果。小的結(jié)果。16l飽和飽和。飽和是一
14、種處理溢出的方法,但是飽和會剪掉。飽和是一種處理溢出的方法,但是飽和會剪掉部分輸出信號,可能會引起信號失真和引起系統(tǒng)非線部分輸出信號,可能會引起信號失真和引起系統(tǒng)非線性。性。l輸入定標(biāo)輸入定標(biāo)scaling。分析所要使用的系統(tǒng),假定最壞。分析所要使用的系統(tǒng),假定最壞的情況,然后對輸入信號定標(biāo),以防止溢出。但是這的情況,然后對輸入信號定標(biāo),以防止溢出。但是這種方法會極大地種方法會極大地降低輸出信號的精確度降低輸出信號的精確度。l固定定標(biāo)固定定標(biāo)scaling。假定最壞情況。假定最壞情況,對中間結(jié)果定標(biāo)。對中間結(jié)果定標(biāo)。這種方法可防止溢出這種方法可防止溢出, 同時(shí)增加了系統(tǒng)的信噪比。同時(shí)增加了系統(tǒng)
15、的信噪比。l動(dòng)態(tài)定標(biāo)動(dòng)態(tài)定標(biāo)scaling??梢员O(jiān)測中間結(jié)果的范圍,只在。可以監(jiān)測中間結(jié)果的范圍,只在需要的時(shí)候?qū)χ虚g結(jié)果定標(biāo)。這種方法可以防止溢出需要的時(shí)候?qū)χ虚g結(jié)果定標(biāo)。這種方法可以防止溢出但會但會增加計(jì)算量增加計(jì)算量(計(jì)算時(shí)間計(jì)算時(shí)間)。3. 溢出的處理方法溢出的處理方法177.1定標(biāo)與溢出處理定標(biāo)與溢出處理n7.1.1 數(shù)的定標(biāo)數(shù)的定標(biāo)n7.1.2 溢出的處理方法溢出的處理方法n7.1.3 常用信號處理算法中的定標(biāo)方法常用信號處理算法中的定標(biāo)方法187.1.3 常用信號處理算法中的定標(biāo)方法常用信號處理算法中的定標(biāo)方法lFIR濾波器的定標(biāo)濾波器的定標(biāo)scaling方法方法u在在FIR濾波
16、器中濾波器中處理溢出的最好方法是設(shè)計(jì)時(shí)使濾處理溢出的最好方法是設(shè)計(jì)時(shí)使濾波器的增益小于波器的增益小于1(設(shè)計(jì)濾波器系數(shù)全為小數(shù)設(shè)計(jì)濾波器系數(shù)全為小數(shù)),這,這樣就不需要對輸入信號定標(biāo)。這種方法和累加器樣就不需要對輸入信號定標(biāo)。這種方法和累加器的保護(hù)位結(jié)合起來,可以有效地防止溢出。的保護(hù)位結(jié)合起來,可以有效地防止溢出。u在在FIR濾波器中一般濾波器中一般不用固定定標(biāo)和輸入定標(biāo)不用固定定標(biāo)和輸入定標(biāo),因因其影響信號分辨率其影響信號分辨率(基本是乘累加基本是乘累加1次對應(yīng)次對應(yīng)1位位)。在在FIR濾波器中可濾波器中可使用動(dòng)態(tài)定標(biāo)使用動(dòng)態(tài)定標(biāo), 前提是由此導(dǎo)致前提是由此導(dǎo)致的計(jì)算時(shí)間增加可以承受。的計(jì)
17、算時(shí)間增加可以承受。飽和處理飽和處理也是某些音也是某些音頻信號一種常用的方法。頻信號一種常用的方法。19lIIR濾波器的定標(biāo)濾波器的定標(biāo)scaling方法方法u由于由于濾波器系數(shù)的量化引入舍入誤差濾波器系數(shù)的量化引入舍入誤差,用定點(diǎn)法實(shí)用定點(diǎn)法實(shí)現(xiàn)現(xiàn)IIR濾波器濾波器時(shí)時(shí), 推薦使推薦使用多個(gè)二階基本節(jié)級聯(lián)組用多個(gè)二階基本節(jié)級聯(lián)組成成, 這樣可以減小高階濾波器對誤差的頻率響應(yīng)靈這樣可以減小高階濾波器對誤差的頻率響應(yīng)靈敏度。另外避免溢出對敏度。另外避免溢出對IIR濾波器也非常重要。濾波器也非常重要。u可以通過把中間結(jié)果保存在處理器累加器來避免可以通過把中間結(jié)果保存在處理器累加器來避免節(jié)間數(shù)據(jù)溢出
18、。為防止在第節(jié)間數(shù)據(jù)溢出。為防止在第k階內(nèi)部發(fā)生數(shù)據(jù)溢出,階內(nèi)部發(fā)生數(shù)據(jù)溢出,需要用增益系數(shù)對濾波器的單位脈沖響應(yīng)需要用增益系數(shù)對濾波器的單位脈沖響應(yīng)(前饋通前饋通道道)定標(biāo)。定標(biāo)。u動(dòng)態(tài)定標(biāo)動(dòng)態(tài)定標(biāo)scaling方法方法。在每個(gè)階段若檢測到溢出。在每個(gè)階段若檢測到溢出, 濾波器內(nèi)部狀態(tài)濾波器內(nèi)部狀態(tài),定標(biāo)定標(biāo)都被減半都被減半, 以提高指令周期以提高指令周期換取為代價(jià)提高了結(jié)果的精度。換取為代價(jià)提高了結(jié)果的精度。knGabs(f(n) ,2 1/2knG(abs(f(n) )20l FFT的定標(biāo)方法的定標(biāo)方法u在在FFT操作里,每次蝶形運(yùn)算后數(shù)據(jù)平均增加一位。操作里,每次蝶形運(yùn)算后數(shù)據(jù)平均增加
19、一位。輸入定標(biāo)輸入定標(biāo)需要移位需要移位 (FFT長度為長度為N), 這會導(dǎo)致在這會導(dǎo)致在計(jì)算計(jì)算FFT之前就衰減之前就衰減 6 dB。u在在固定定標(biāo)固定定標(biāo)中中, 每級蝶形運(yùn)算輸出除以每級蝶形運(yùn)算輸出除以2, 這是最常用這是最常用的的FFT定標(biāo)方法定標(biāo)方法, 因?yàn)樗唵味矣斜容^好的信噪比。因?yàn)樗唵味矣斜容^好的信噪比。但是但是, 對于大的對于大的FFT, 這種定標(biāo)可能會使信息丟失。這種定標(biāo)可能會使信息丟失。u另一種方法是另一種方法是動(dòng)態(tài)定標(biāo)動(dòng)態(tài)定標(biāo), 即在輸出溢出時(shí)再除以即在輸出溢出時(shí)再除以2。在。在這種情況下這種情況下, 會在這個(gè)過程中指定一個(gè)變量會在這個(gè)過程中指定一個(gè)變量, 每定標(biāo)一每
20、定標(biāo)一次變量的值加次變量的值加1, 計(jì)算結(jié)束后根據(jù)變量的值把結(jié)果乘以計(jì)算結(jié)束后根據(jù)變量的值把結(jié)果乘以一個(gè)系數(shù)。動(dòng)態(tài)定標(biāo)的信噪比最好一個(gè)系數(shù)。動(dòng)態(tài)定標(biāo)的信噪比最好, 但會增加但會增加FFT循環(huán)循環(huán)次數(shù)。次數(shù)。N2logN2log21(右移右移1位即位即2, )log10202=6第第7章章 應(yīng)用程序設(shè)計(jì)應(yīng)用程序設(shè)計(jì)內(nèi)容提要:內(nèi)容提要:n7.1 定標(biāo)與溢出處理定標(biāo)與溢出處理n7.2 基礎(chǔ)算術(shù)運(yùn)算基礎(chǔ)算術(shù)運(yùn)算n7.3 FIR濾波器濾波器n7.4 IIR濾波器濾波器n7.5 快速傅里葉變換快速傅里葉變換(FFT)n7.6 DSPLIB的使用的使用227.2 基礎(chǔ)算術(shù)運(yùn)算基礎(chǔ)算術(shù)運(yùn)算n7.2.1 加減運(yùn)
21、算加減運(yùn)算n7.2.2 乘法運(yùn)算乘法運(yùn)算n7.2.3 除法運(yùn)算除法運(yùn)算n7.2.4 小數(shù)乘法小數(shù)乘法237.2.1 加減運(yùn)算加減運(yùn)算l在數(shù)字信號處理中,加減運(yùn)算是常見的算術(shù)運(yùn)算。在數(shù)字信號處理中,加減運(yùn)算是常見的算術(shù)運(yùn)算。一般使用一般使用16位或位或32位加減運(yùn)算位加減運(yùn)算,數(shù)值分析、浮,數(shù)值分析、浮點(diǎn)運(yùn)算和其它操作點(diǎn)運(yùn)算和其它操作可能需要可能需要32位以上的運(yùn)算位以上的運(yùn)算。lC55x有直接完成有直接完成16位或位或32位加減運(yùn)算的指令,位加減運(yùn)算的指令,但沒有能直接完成多字加減運(yùn)算的指令但沒有能直接完成多字加減運(yùn)算的指令。要進(jìn)行。要進(jìn)行多字加減運(yùn)算,需要通過編程方法實(shí)現(xiàn)。多字加減運(yùn)算,需要
22、通過編程方法實(shí)現(xiàn)。24l 以下指令可在單周期內(nèi)完成以下指令可在單周期內(nèi)完成32位加法運(yùn)算:位加法運(yùn)算: MOV40 dbl(Lmem),ACx ADD dbl(Lmem),ACxl 64位的高位的高32位加法要考慮低位加法要考慮低32位加法產(chǎn)生的進(jìn)位位加法產(chǎn)生的進(jìn)位,高高32位位使使用以下指用以下指令:令: ADD uns(Smem), CARRY, ACxl 以下指令可在單周期內(nèi)完成以下指令可在單周期內(nèi)完成32位減法運(yùn)算:位減法運(yùn)算:MOV40 dbl(Lmem), ACxSUB dbl(Lmem), ACxl 64位的位的高高32位減位減法要考慮低法要考慮低32位減法產(chǎn)生的借位,使位減法產(chǎn)
23、生的借位,使用以下指令:用以下指令: SUB uns(Smem), BORROW,ACx 可進(jìn)行單獨(dú)可進(jìn)行單獨(dú)32位或位或64位的低位的低32位加位加可進(jìn)行單獨(dú)可進(jìn)行單獨(dú)32位或位或64位的低位的低32位加位加25M40=1ADD (Smem-1) #16, ACx 3247位位4863位位SUB (Smem-1) X3(偶地址) X2 X1 X0AR2 - Y3(偶地址) Y2 Y1 Y0 AR3 - W3(偶地址) W2 W1 W0 1000h地址值依次增加1004h1008h.mmregs為存儲器映射寄存器定義符號名. 與對所有存儲器映射寄存器執(zhí)行.set功能一樣。C54x 匯編器(手冊
24、)支持.mmregs指令。C函數(shù)調(diào)用時(shí)參量與寄存器(10個(gè))的排列關(guān)系按表6-11執(zhí)行(默認(rèn): c55_std) 。 c55_compat只能傳遞只能傳遞3個(gè)參數(shù)到寄存器個(gè)參數(shù)到寄存器 。u參參量按照在函數(shù)聲明中的排列順序被分配給寄存器量按照在函數(shù)聲明中的排列順序被分配給寄存器。 參參量放置的寄存器類型由參數(shù)的類型決量放置的寄存器類型由參數(shù)的類型決定定(表表6-11)。 若參量若參量數(shù)超數(shù)超過可用寄存器數(shù)過可用寄存器數(shù)量量(10個(gè)個(gè)), 多余參多余參量會被壓入堆棧量會被壓入堆棧。參數(shù)類型參數(shù)類型寄存器分配順序寄存器分配順序?qū)?yīng)的數(shù)據(jù)類型對應(yīng)的數(shù)據(jù)類型16或或23位數(shù)據(jù)位數(shù)據(jù)指針指針(X)AR0
25、, (X)AR1, (X)AR2, (X)AR3, (X)AR4數(shù)組數(shù)組,字符串字符串,指針或占用空指針或占用空間超過間超過2字節(jié)長的結(jié)構(gòu)體字節(jié)長的結(jié)構(gòu)體16位數(shù)據(jù)位數(shù)據(jù)T0, T1, AR0, AR1, AR2, AR3, AR4(無符號無符號)字符字符,短整數(shù)短整數(shù), 整數(shù)整數(shù)32(40)位數(shù)據(jù)位數(shù)據(jù) AC0, AC1, AC2長整數(shù)長整數(shù),浮點(diǎn)數(shù)和長度不大浮點(diǎn)數(shù)和長度不大于于2個(gè)字節(jié)的結(jié)構(gòu)體個(gè)字節(jié)的結(jié)構(gòu)體27u對于對于放入堆棧的參量按照下述方法處放入堆棧的參量按照下述方法處理理: 首首先先將堆棧調(diào)將堆棧調(diào)整到整到偶數(shù)邊偶數(shù)邊界界上上; 然后然后, 每每一個(gè)一個(gè)參數(shù)按照相參數(shù)按照相應(yīng)參應(yīng)參
26、數(shù)類數(shù)類型在型在堆棧上排堆棧上排列列(long, float, double,代碼指針代碼指針, 大模式數(shù)據(jù)大模式數(shù)據(jù)指針按偶數(shù)邊界排列指針按偶數(shù)邊界排列, 其他無需按歐邊界排列其他無需按歐邊界排列)。(1)將所要傳遞到子函數(shù)的參數(shù)放入寄存器或堆棧)將所要傳遞到子函數(shù)的參數(shù)放入寄存器或堆棧表表6-11 C函數(shù)調(diào)用中參量與寄存器的排列關(guān)系函數(shù)調(diào)用中參量與寄存器的排列關(guān)系c55_compat,c55_stduNote: C55x Calling ConventionsuThe above is the default calling convention, c55_std. When using
27、the less efficient c55_compat, the calling convention is that up to three arguments can be passed in registers. The first argument goes into either AR1 or AC0; if it is 16-bit data or a data pointer, it goes into AR1; otherwise, it goes into AC0. Similarly, the second argument goes into AR2 or AC1,
28、and the third argument goes into AR3 or AC2.sect .text.align 4.globalstart;.sym start,start, 36, 2, 0 start:MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3 L1: MOV40 dbl(*AR1(#2), AC0 ;AC0 = X1 X0 ADD dbl(*AR2(#2), AC0 ;AC0 = X1 X0 + Y1 Y0 MOV AC0,dbl(*AR3(#2) ;保存W1 W0. MOV40 dbl(*AR1), AC0 ;AC0 = X3 X
29、2 ADD uns(*AR2(#1),CARRY,AC0;AC0=X3 X2 + 00 Y2 + CARRY ADD *AR2 #16, AC0 ;AC0= X3 X2 +Y3 Y2 + CARRY MOV AC0, dbl(*AR3) ;保存 W3 W2. B L128.sym- COFF Symbolic Debugging Directives已廢棄已廢棄The .sym directive defines a global variable, a local variable, or a function. Several parameters allow you to associa
30、te various debugging information with the variable or function.格式:.sym name, value, type, storage class, size, tag, dims參考文獻(xiàn)參考文獻(xiàn): TMS320C28X系列DSP指令和編程指南-附錄B 符號調(diào)試偽指令.sym(需看附錄A:難懂)茶苑老吳的博客:”關(guān)于TMS320C55x的匯編語言中的.sym偽指令 “(此文獻(xiàn)非常詳細(xì)明了)標(biāo)號,地址,表示函數(shù),外部外部,不占存儲用數(shù)表示對應(yīng)C變量變量類型,占存儲單元位數(shù).sect .text.align 4.globalstart;.
31、sym start,start, 36, 2, 0 start:MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3 L1: MOV40 dbl(*AR1(#2), AC0 ;AC0 = X1 X0 ADD dbl(*AR2(#2), AC0 ;AC0 = X1 X0 + Y1 Y0 MOV AC0,dbl(*AR3(#2) ;保存W1 W0. MOV40 dbl(*AR1), AC0 ;AC0 = X3 X2 ADD uns(*AR2(#1),CARRY,AC0 ;AC0=X3X2+00Y2 +CARRY ADD *AR2 X3(偶地址) X2 X1 X0
32、AR2 - Y3(偶地址) Y2 Y1 Y0 AR3 - W3(偶地址) W2 W1 W0 1000h地址值依次增加1004h1008h指針分配無帶進(jìn)位的32位加指令此指令不是帶進(jìn)位加, 也不需要, 因X2加Y2的進(jìn)位就在AC0(16)中.1002h1006h100Ah1005h加法AC0=AC0+Y300該指令執(zhí)行后AR1的值不變,該指令尋址:(AR1)+2 .sect .text.align 4.globalstart;.sym start,start,36,2,0 start:MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3 L1: MOV40 d
33、bl(*AR1(#2), AC0 ;AC0 = X1 X0 ADD dbl(*AR2(#2), AC0 ;AC0 = X1 X0 + Y1 Y0 MOV AC0,dbl(*AR3(#2) ;保存W1 W0. MOV40 dbl(*AR1), AC0 ;AC0 = X3 X2 ADD uns(*AR2(#1),CARRY,AC0 ;AC0=X3X2+00Y2 +CARRY ADD *AR2 X3(偶地址) X2 X1 X0AR2 - Y3(偶地址) Y2 Y1 Y0 AR3 - W3(偶地址) W2 W1 W0 1000h地址值依次增加1004h1008h.sect .text.align 4.
34、global start;.sym start, start,36,2,0 start:MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3 L1: MOV40 dbl(*AR1(#2),AC0 ;AC0=X1X0 SUB dbl(*AR2(#2),AC0 ;AC0=X1X0-Y1Y0 MOV AC0,dbl(*AR3(#2) ;保存保存W1W0. MOV40 dbl(*AR1),AC0 ;AC0=X3X2 SUB uns(*AR2(#1),BORROW,AC0 ;AC0=X3X2-00Y2-BORROW SUB *AR2 X3(偶地址) X2 X1 X0A
35、R2 - Y3(偶地址) Y2 Y1 Y0 AR3 - W3(偶地址) W2 W1 W0 1000h地址值依次增加1004h1008h指針分配除加法換成減法, CARRY換成BORROW外, 步驟相同.7.2 基礎(chǔ)算術(shù)運(yùn)算基礎(chǔ)算術(shù)運(yùn)算n7.2.1 加減運(yùn)算加減運(yùn)算n7.2.2 乘法運(yùn)算乘法運(yùn)算n7.2.3 除法運(yùn)算除法運(yùn)算n7.2.4 小數(shù)乘法小數(shù)乘法337.2.2乘法運(yùn)算乘法運(yùn)算lC55x提供了硬件乘法器,提供了硬件乘法器,16位乘法可在一個(gè)位乘法可在一個(gè)指令周期內(nèi)完成指令周期內(nèi)完成。l高于高于16位的乘法運(yùn)算可以采用下述方法實(shí)現(xiàn)位的乘法運(yùn)算可以采用下述方法實(shí)現(xiàn)(以(以32位乘法為例)。位乘
36、法為例)。34例例7-3, 32位整數(shù)乘法運(yùn)算。文件名位整數(shù)乘法運(yùn)算。文件名:mpy32.asm.mmregs.model call=c55_std.model mem=large35;*; 本子程序是兩個(gè)32位整數(shù)乘法, 得到一個(gè)64位結(jié)果。; 操作數(shù)取自數(shù)據(jù)存儲器, 運(yùn)算結(jié)果送回?cái)?shù)據(jù)存儲器。; 數(shù)數(shù)據(jù)存儲據(jù)存儲: 指指針分配針分配:; X1 X0 32位操作數(shù) AR0 - X1; Y1 Y0 32位操作數(shù) X0; W3 W2 W1 W0 64位結(jié)果 AR1 - Y1; Y0; 入口條件入口條件: AR2 - W0; SXMD = 1 (允許符號擴(kuò)展) W1; SATD = 0 (不做飽和處
37、理) W2; FRCT = 0 (關(guān)小數(shù)模式) W3;限制條件: 延遲鏈和輸入序列必須指定為長字類型。;*.sect .text.align 4.global start;.symstart,start,36,2,0 start:MOV #0100h, AR0 MOV #0102h, AR1 MOV #0104h, AR2 BSET SXMD; 入口條件 BCLR SATD BCLR FRCT36例例7-3, 32位整數(shù)乘法運(yùn)算。位整數(shù)乘法運(yùn)算。 指指針分配針分配: AR0 - X1 X0 AR1 - Y1 Y0 AR2 - W0 W1 W2 W3有符有符號數(shù)的號數(shù)的數(shù)數(shù)據(jù)存儲據(jù)存儲: X1
38、X0 32位 Y1 Y0 32位 無符號乘 X0 Y0 有符號與無符號乘 X1Y0有符號與無符號乘 X0Y1 有符號乘 X1Y1 結(jié)果累加 W3 W2 W1 W0 64位0100h地址值依次增加0102h0104h32位32位32位存儲單元存儲單元0100h0103h中的數(shù)據(jù)中的數(shù)據(jù), 例題中沒有給出例題中沒有給出,可添加數(shù)據(jù)測試可添加數(shù)據(jù)測試:RPT #3MOV #8888H,*AR0+MOV #1288H,*(#0100h);MOV #1288H,*(#0102h);含此語句含此語句,乘積為正乘積為正, 否則為負(fù)否則為負(fù)MOV #0100h,AR0 L1: AMAR *AR0+ ;AR0指
39、向X0 |AMAR *AR1+ ;AR1指向Y0MPYM uns(*AR0-),uns(*AR1),AC0 ;ACO=X0*Y0MOV AC0,*AR2+ ;保存W0 (是AC0的低16位)MACM *AR0+,uns(*AR1-),AC0#16,AC0 ;AC0=X0*Y016+X1*Y0MACM uns(*AR0-),*AR1,AC0 ;AC0=X0*Y016+X1*Y0+X0*Y1MOV AC0,*AR2+ ;保存W1MACM *AR0,*AR1,AC0#16,AC0 ;AC0=AC016+X1*Y1MOV AC0,*AR2+ ;保存W2MOV HI(AC0),*AR2 ;保存W3 B
40、L137例例7-3, 32位整數(shù)乘法運(yùn)算。位整數(shù)乘法運(yùn)算。AR0-X1 X0AR1-Y1 Y00100h0102h指針分配AR2-W0 W1 W2 W30104h X1 X0 32位 Y1 Y0 32位 X0 Y0 X1Y0 X0Y1 X1Y1 累加W3 W2 W1 W064位;即累加前AC0的高16位1001h1003h1005h帶符號乘7.2 基礎(chǔ)算術(shù)運(yùn)算基礎(chǔ)算術(shù)運(yùn)算n7.2.1 加減運(yùn)算加減運(yùn)算n7.2.2 乘法運(yùn)算乘法運(yùn)算n7.2.3 除法運(yùn)算除法運(yùn)算n7.2.4 小數(shù)乘法小數(shù)乘法387.2.3 除法運(yùn)算除法運(yùn)算lC55x沒有提供硬件除法器,也沒有提供專門的除沒有提供硬件除法器,也沒有
41、提供專門的除法指令,要實(shí)現(xiàn)除法運(yùn)算需借助于條件減法指令法指令,要實(shí)現(xiàn)除法運(yùn)算需借助于條件減法指令SUBC和重復(fù)指令和重復(fù)指令RPT。l根據(jù)被除數(shù)絕對值與除數(shù)絕對值的大小關(guān)系,除法根據(jù)被除數(shù)絕對值與除數(shù)絕對值的大小關(guān)系,除法的實(shí)現(xiàn)過程略有不同:的實(shí)現(xiàn)過程略有不同:u當(dāng)當(dāng)|被除數(shù)被除數(shù)|被除數(shù); AR1-除數(shù); AR2-商; AR3-余數(shù); 注:; 無符號除法,被除數(shù)、除數(shù)均為16位; 關(guān)閉符號擴(kuò)展,被除數(shù)、除數(shù)均為正數(shù); 運(yùn)算完成后AC0(15-0)為商, AC0(31-16)為余數(shù)。;* 40.sect .text.align 4.globalstart;.symstart,start,36,
42、2,0 start:MOV #0100h,AR0 MOV #0101h,AR1 MOV #0102h,AR2 MOV #0103h,AR3 L1:BCLR SXMD ; 清零SXMD(關(guān)閉符號擴(kuò)展)MOV *AR0,AC0 ; 把被除數(shù)放入AC0RPT #(16-1) ; 執(zhí)行subc 16次SUBC *AR1,AC0,AC0 ; AR1指向除數(shù)MOV AC0,*AR2 ; 保存商MOV HI(AC0),*AR3 ; 保存余數(shù) B L141指針分配AR0-被除數(shù)AR1-除數(shù)AR2-商AR3-余數(shù)0100h0102h0101h0103h例例7-4, 無符號無符號16位除位除16位整數(shù)除法。位整數(shù)
43、除法。存儲單元存儲單元0100h0101h中的數(shù)據(jù)中的數(shù)據(jù), 例題中沒有給出例題中沒有給出,可添加數(shù)據(jù)測試可添加數(shù)據(jù)測試:MOV #0608H,*(#0100h)MOV #020H,*(#0101h)例例7-5,無符號,無符號32位除位除16位整數(shù)除法。位整數(shù)除法。文件名為:文件名為:udiv32o16.asm。.mmregs.model call=c55_std.model mem=large42;*; 指針分配; AR0-被除數(shù)高位; 被除數(shù)低位; AR1-除數(shù); AR2-商高位; 商低位; AR3-余數(shù);注:;無符號除法,被除數(shù)為32位,除數(shù)為16位;關(guān)閉符號擴(kuò)展,被除數(shù)、除數(shù)均為正數(shù);
44、第一次除法之前, 把被除數(shù)高16位存入AC0(15-0);第一次除法之后, 商的高位在AC0(15-0)中, 需轉(zhuǎn)存到AR2尋址單元;第二次除法之前,余數(shù)在AC0(31-16),把被除數(shù)低16位存入AC0(15-0);第二次除法之后, AC0(15-0)為商的低16位, AC0(31-16)為余數(shù) ;*.sect.text.align 4.global startstart: MOV #0100h,AR0 MOV #0102h,AR1 MOV #0104h,AR2 MOV #0106h,AR3L1:BCLR SXMD ;清零SXMD(關(guān)閉符號擴(kuò)展)MOV *AR0+,AC0 ;把被除數(shù)高位存入
45、AC0 | RPT #(15-1) ;執(zhí)行subc 15次SUBC *AR1,AC0,AC0;AR1指向除數(shù)SUBC *AR1,AC0,AC0 ;執(zhí)行subc最后一次 | MOV #8,AR4 ;把AC0_L 存儲地址(08h)裝入AR4MOV AC0,*AR2+ ;保存商的高位MOV *AR0+,*AR4 ;把被除數(shù)低位裝入AC0_L(08h)RPT #(16-1) SUBC *AR1,AC0,AC0 ;執(zhí)行subc 16次MOV AC0,*AR2+ ;保存商的低位MOV HI(AC0),*AR3 ;保存余數(shù)BSET SXMD ;置位SXMD (打開符號擴(kuò)展) B L143指針分配AR0-被
46、除數(shù)高位 被除數(shù)低位AR1-除數(shù)AR2-商高位 商低位AR3-余數(shù)0100h0104h0102h0106h;不能用MOV *AR0+,AC0(高16位清0)或者用MOV *AR0+,*(#AC0L)例例7-6, 帶符號帶符號16位除位除16位整數(shù)除法。位整數(shù)除法。文件名為:文件名為:sdiv16o16.asm。 .mmregs .model call=c55_std .model mem=large .sect.text .align 4;*; 指針分配指針分配; AR0-被除數(shù)被除數(shù); AR1-除數(shù)除數(shù);AR2-商商;AR3-余數(shù)余數(shù); 注:注:; 帶符號除法帶符號除法,被除數(shù)為,被除數(shù)為1
47、6位,除數(shù)為位,除數(shù)為16位位;打開符號擴(kuò)展,被除數(shù)、除數(shù)可為負(fù)數(shù)打開符號擴(kuò)展,被除數(shù)、除數(shù)可為負(fù)數(shù);除法運(yùn)算之前,商的符號存入除法運(yùn)算之前,商的符號存入AC0;除法運(yùn)算之后,商存入除法運(yùn)算之后,商存入AC1(15-0), 余余數(shù)存入數(shù)存入AC1(31-16);*44.globalstartstart: MOV #0100h,AR0 MOV #0101h,AR1 MOV #0102h,AR2 MOV #0103h,AR3 L1: BSET SXMD ; 置位號SXMD (打開符擴(kuò)展) MPYM *AR0,*AR1,AC0 ; 計(jì)算期望得到的商的符號MOV *AR1,AC1 ; 把除數(shù)存入AC1
48、ABS AC1,AC1 ; 求絕對值,|除數(shù)|MOV AC1,*AR2 ; 暫時(shí)保存 |除數(shù)|MOV *AR0,AC1 ; 把被除數(shù)存入 AC1ABS AC1,AC1 ; 求絕對值,|被除數(shù)|RPT #(16-1) ; 執(zhí)行subc 16次45SUBC *AR2,AC1,AC1 ;AR2 - |除數(shù)|MOV HI(AC1),*AR3 ; 保存余數(shù)MOV AC1,*AR2 ; 保存商(AC1的低16位,是正數(shù))SFTS AC1,#16 ;對正數(shù)商左移16位: 使符號位在最高位(31)NEG AC1,AC1 ; 對商求反2補(bǔ)碼(商變成負(fù)數(shù))XCCPART label, AC0被除數(shù)AR1-除數(shù)AR
49、2-商AR3-余數(shù)0100h0102h0101h0103h把除數(shù)取絕對值把被除數(shù)取絕對值無符號數(shù)除法例例7-7,帶符號,帶符號32位除位除16位整數(shù)除法。位整數(shù)除法。文件名為:文件名為:sdiv32o16.asm.mmregs.model call=c55_std.model mem=large;*; 指針分配:(被除數(shù)和商都被指定為長字); AR0-被除數(shù)高半部分(高16位)(NumH)(偶地址);被除數(shù)低半部分(低16位)(NumL); AR1-除數(shù)(Den);AR2-商的高半部分(高16位)(QuotH)(偶地址);商的低半部分(低16位)(QuotL);AR3-余數(shù)(Rem); 注:;
50、 帶符號除法,被除數(shù)為32位,除數(shù)為16位;打開符號擴(kuò)展,被除數(shù)、除數(shù)可為負(fù)數(shù);除法運(yùn)算之前,期望的商的符號存入AC0;第一次除法運(yùn)算之前,把被除數(shù)的高16位分存入AC1;第一次除法運(yùn)算之后,把商的高16位存入AC1(15-0);第二次除法運(yùn)算之前,把被除數(shù)的低16位存入AC1;第二次除法運(yùn)算之后,把商的低16位存入AC1(15-0),余數(shù)存入AC1(31-16);*46.sect.text.align 4.global start.symstart,start,36,2,0 start:MOV #0100h,AR0 MOV #0102h,AR1 MOV #0104h,AR2 MOV #010
51、6h,AR3 MOV #0108h,AR4 L1:BSET SXMD ; 置位SXMD (打開符號擴(kuò)展)MPYM *AR0,*AR1,AC0 ; 除法結(jié)果的符號位( NumH x Den )MOV *AR1,AC1; AC1 = Den (16位除數(shù))ABS AC1,AC1 ; AC1 = abs(Den) (除數(shù)取絕對值)MOV AC1,*AR3 ; Rem = abs(Den) (暫存除數(shù)絕對值)MOV40 dbl(*AR0),AC1 ; AC1 = NumH NumL (32位被除數(shù))ABS AC1,AC1 ; AC1 = abs(Num) (被除數(shù)取絕對值)MOV AC1,dbl(*A
52、R2) ;QuotH = abs(NumH) (暫存被除數(shù)絕對值) ;QuotL = abs(NumL) 47指針分配AR0-被除數(shù)高位(NumH) 被除數(shù)低位(NumL) AR1-除數(shù)AR2-商高位(QuotH) 商低位(QuotL) AR3-余數(shù)AR4-AC1_L存儲地址0100h0104h0102h0106h0108h11hMOV *AR2,AC1 ; AC1 = QuotH (被除數(shù)取絕對值高16位)RPT #(15-1) ; 執(zhí)行subc 15次SUBC *AR3,AC1,AC1 ; (被除數(shù)取絕對值高16位除以除數(shù))SUBC *AR3,AC1,AC1 ; 最后一次執(zhí)行subc| M
53、OV #11,AR4 ; 把AC1_L存儲地址裝入AR4MOV AC1,*AR2+ ; 保存 QuotH (存儲結(jié)果商的高16位)MOV *AR2,*AR4 ;AC1_L=QuotH(應(yīng)該是被除數(shù)絕對值低16位)RPT #(16-1) ;執(zhí)行subc 16次SUBC *AR3,AC1,AC1MOV AC1,*AR2- ; 保存 QuotLMOV HI(AC1),*AR3 ; 保存 RemBCC skip,AC0= #0 ; 如果實(shí)際結(jié)果應(yīng)該為正數(shù),跳到skip.MOV40 dbl(*AR2),AC1 ; 否則,對商取反.NEG AC1,AC1MOV AC1,dbl(*AR2) skip: B
54、L148(QuotL)的存儲單元內(nèi)容 7.2 基礎(chǔ)算術(shù)運(yùn)算基礎(chǔ)算術(shù)運(yùn)算n7.2.1 加減運(yùn)算加減運(yùn)算n7.2.2 乘法運(yùn)算乘法運(yùn)算n7.2.3 除法運(yùn)算除法運(yùn)算n7.2.4 小數(shù)乘法小數(shù)乘法497.2.4 小數(shù)乘法小數(shù)乘法l在定點(diǎn)在定點(diǎn)DSP的某些應(yīng)用中,的某些應(yīng)用中,整數(shù)運(yùn)算整數(shù)運(yùn)算很難滿足要很難滿足要求。這是因?yàn)樗?。這是因?yàn)樗陨泶嬖谌毕葑陨泶嬖谌毕荩簎兩個(gè)兩個(gè)16位整數(shù)相乘位整數(shù)相乘, 乘積乘積總是總是“向左增長向左增長” (即小即小數(shù)點(diǎn)左側(cè)的位數(shù)增加數(shù)點(diǎn)左側(cè)的位數(shù)增加), 這意味著這意味著多次相乘后多次相乘后, 乘乘積將很快超出定點(diǎn)器件的數(shù)據(jù)范圍積將很快超出定點(diǎn)器件的數(shù)據(jù)范圍。u保存
55、保存32位乘積到存儲器位乘積到存儲器, 要占用要占用2個(gè)個(gè)CPU周期和周期和2個(gè)字的存儲器空間。個(gè)字的存儲器空間。u由于由于乘法器都是乘法器都是16位相乘位相乘, 因此將因此將32位乘積再位乘積再作為乘法器的輸入時(shí)就顯得較繁瑣作為乘法器的輸入時(shí)就顯得較繁瑣, 不能勝任遞不能勝任遞歸運(yùn)算歸運(yùn)算。50l為了克服這些缺陷,在實(shí)際應(yīng)用中更多采用的是為了克服這些缺陷,在實(shí)際應(yīng)用中更多采用的是小數(shù)運(yùn)算。小數(shù)運(yùn)算。小數(shù)運(yùn)算具有如下優(yōu)點(diǎn)小數(shù)運(yùn)算具有如下優(yōu)點(diǎn): u乘積乘積總是總是“向右增長向右增長”。這就意味著。這就意味著超出定點(diǎn)器超出定點(diǎn)器件數(shù)據(jù)范圍的將是不太感興趣的部分件數(shù)據(jù)范圍的將是不太感興趣的部分。u既
56、可以存儲既可以存儲32位乘積位乘積, 也可近似存儲高也可近似存儲高16位乘積位乘積,這就允許用較少的資源保存結(jié)果。這就允許用較少的資源保存結(jié)果。u可以用于遞歸運(yùn)算可以用于遞歸運(yùn)算。 517.2.4 小數(shù)乘法小數(shù)乘法小數(shù)部分越靠近小數(shù)點(diǎn)小數(shù)部分越靠近小數(shù)點(diǎn), 其權(quán)值越大。其權(quán)值越大。例例7-8, 兩個(gè)兩個(gè)Q31格式的有符號小數(shù)相乘格式的有符號小數(shù)相乘, 得到一個(gè)得到一個(gè)Q31格式結(jié)果。格式結(jié)果。文件名為文件名為: mpyQ31.asm。 需要注意的是:需要注意的是:u兩個(gè)帶符號小數(shù)相乘兩個(gè)帶符號小數(shù)相乘, 所得乘積帶有所得乘積帶有2個(gè)符號位個(gè)符號位。u為解決為解決冗余符號位冗余符號位的問題的問題
57、, 需在程序中設(shè)定狀態(tài)寄需在程序中設(shè)定狀態(tài)寄存器存器ST1中的中的FRCT(小數(shù)方式小數(shù)方式)為為1, 這樣當(dāng)乘法器這樣當(dāng)乘法器將結(jié)果傳送至累加器時(shí)就會將結(jié)果傳送至累加器時(shí)就會自動(dòng)左移自動(dòng)左移1位位。52.mmregs.model call=c55_std.model mem=large;*;操作數(shù)取自數(shù)據(jù)存儲器,運(yùn)算結(jié)果送回?cái)?shù)據(jù)存儲器。; 數(shù)據(jù)存儲數(shù)據(jù)存儲: 指指針分配針分配:; X1 X0 Q31操作數(shù) AR0 - X1; Y1 Y0 Q31操作數(shù) X0; W1 W0 Q31結(jié)果 AR1 - Y1; Y0; 入口條件入口條件: AR2 -W0(偶地址); SXMD = 1 (允許符號擴(kuò)展)
58、 W1; SATD = 0 (不做飽和處理) ; FRCT = 1 (運(yùn)算結(jié)果左移一位運(yùn)算結(jié)果左移一位) ;限制條件:W1被指定為偶地址;*53例例7-8, 兩個(gè)兩個(gè)Q31格式有格式有符號小數(shù)相乘。符號小數(shù)相乘。 X1 X0 Q31 Y1 Y0 Q31 X0 Y0 X1Y0 X0Y1 X1Y1 累加W1 W0 w1 w0(忽略) .sect .text .align 4 .global start ;.sym start,start,36,2,0 start:MOV #0100h,AR0 MOV #0102h,AR1 MOV #0104h,AR2 BSET SXMD;入口條件 BCLR SAT
59、D BSET FRCT L1: AMAR *AR0+ ;AR0指向X0 MPYM uns(*AR0-),*AR1+,AC0 ;AC0=X0*Y1 MACM *AR0,uns(*AR1-),AC0 ;AC0=X0*Y1+X1*Y0 MACM *AR0,*AR1,AC0#16,AC0;AC0=AC016+X1*Y1 MOV AC0,dbl(*AR2) ;保存W1W0 B L154AR0-X1 Q31乘數(shù)高位 X0 Q31乘數(shù)低位AR1-Y1 Q31乘數(shù)高位 Y0 Q31乘數(shù)低位AR2-W1 Q31乘結(jié)果高位 W0 Q31乘結(jié)果低位0100h0104h0102h Y1 Y0 Q31 X1 X0 Q3
60、1 X0 Y0(忽略,不乘) X0Y1 X1Y0 X1Y1 累加W1 W0 w1 w0(忽略) 1001h(忽略,不乘)存儲單元存儲單元0100h0103h中的數(shù)據(jù)中的數(shù)據(jù), 例題中沒有給出例題中沒有給出,可添加數(shù)據(jù)測試可添加數(shù)據(jù)測試:RPT #3MOV #8888H,*AR0+MOV #1288H,*(#0100h);MOV #1288H,*(#0102h);含此語句含此語句,乘積為正乘積為正, 否則為負(fù)否則為負(fù)MOV #0100h,AR0第第7章作業(yè)章作業(yè)7.7 (仿真調(diào)試仿真調(diào)試)利用利用第第3章章中中C語言工程所用語言工程所用命令文件命令文件,在,在CCS下下建立關(guān)于建立關(guān)于例例7-3
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024裝修增加項(xiàng)目施工合同模板
- 個(gè)人經(jīng)營貸款合同樣本
- 2024建筑單包工合同范文
- 2024股份擔(dān)保借款合同范本
- 2024個(gè)人住房公積金的借款合同
- 2024動(dòng)產(chǎn)家具無償寄托合同
- 房產(chǎn)項(xiàng)目合作開發(fā)協(xié)議書
- 三輪車買賣合同完整協(xié)議2024年
- 倉配租賃合同模板
- 工業(yè)用地投資協(xié)議
- S7-1200PLC技術(shù)及應(yīng)用 課件 項(xiàng)目17 步進(jìn)電機(jī)控制
- 《生物技術(shù)制藥》課程介紹與教學(xué)大綱
- 《現(xiàn)代農(nóng)業(yè)技術(shù)推廣》課件-第七組 農(nóng)民問題專題調(diào)研
- 第30課 家居收納技巧 課件 2023-2024學(xué)年蘇教版初中勞動(dòng)技術(shù)七年級上冊
- 2024中國一汽校園招聘1000+崗位高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- GB/T 19533-2024汽車用壓縮天然氣鋼瓶定期檢驗(yàn)與評定
- 婦產(chǎn)科護(hù)士晉升述職報(bào)告
- 骨髓腔內(nèi)輸液(IOI)技術(shù)
- 建筑幕墻工程(鋁板、玻璃、石材)監(jiān)理實(shí)施細(xì)則(全面版)
- 小學(xué)數(shù)學(xué)與思政融合課教學(xué)設(shè)計(jì)
- 體育公園運(yùn)營管理方案
評論
0/150
提交評論