DSP技術(shù)與應(yīng)用線(xiàn)性匯編語(yǔ)言簡(jiǎn)介.ppt
《DSP技術(shù)與應(yīng)用線(xiàn)性匯編語(yǔ)言簡(jiǎn)介.ppt》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《DSP技術(shù)與應(yīng)用線(xiàn)性匯編語(yǔ)言簡(jiǎn)介.ppt(21頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
DSP技術(shù)與應(yīng)用—— 線(xiàn)性匯編語(yǔ)言簡(jiǎn)介,,線(xiàn)性匯編語(yǔ)言簡(jiǎn)介,匯編代碼結(jié)構(gòu) 線(xiàn)性匯編語(yǔ)言簡(jiǎn)介,匯編代碼結(jié)構(gòu),Label: parallel bars [condition] instruction unit operands;comments (1)Label標(biāo)號(hào) 標(biāo)號(hào)用來(lái)定義一行代碼或一個(gè)變量,它代表一條指令或數(shù)據(jù)的存儲(chǔ)地址,標(biāo)號(hào)后面的冒號(hào)是可選的。 a標(biāo)號(hào)的第1個(gè)字符必須是字母或下劃線(xiàn)”_”跟一個(gè)字母; b標(biāo)號(hào)的第1個(gè)字符必須在文件的第1列; c標(biāo)號(hào)最多可包含32個(gè)字母字符; d并行指令不能使用標(biāo)號(hào)。 (2)Parallel bars 并行符號(hào) ||,匯編代碼結(jié)構(gòu),Label: parallel bars [condition] instruction unit operands;comments (3)[condition]條件 A 如果指令沒(méi)有指出條件,指令總被執(zhí)行; B 如果給定條件,當(dāng)條件為真,指令執(zhí)行; C 如果給定條件,當(dāng)條件為假,指令不執(zhí)行。 如[A1] A1!=0 A1=0 [!A1] A1=0 A1!=0,匯編代碼結(jié)構(gòu),Label: parallel bars [condition] instruction unit operands;comments 4 instruction指令 匯編代碼指令包括偽指令和命令助記符 A 偽指令用來(lái)在匯編語(yǔ)言中控制匯編過(guò)程或定義數(shù)據(jù)結(jié)構(gòu)。所有偽指令都以圓點(diǎn)打頭。 如: .sect “name” .double value .float value .byte value B 命令助記符代表有效微處理器命令,它執(zhí)行程序操作。,匯編代碼結(jié)構(gòu),Label: parallel bars [condition] instruction unit operands;comments Uint 功能單元 C6000有8個(gè)功能單元,每個(gè)功能單元有兩種類(lèi)型。功能單元以“.”開(kāi)始,后面跟一個(gè)功能單元分類(lèi)符。 .S1 .S2 .L1 .L2 .M1 .M2 .D1 .D2 另有交叉通道 如.L1X,匯編代碼結(jié)構(gòu),Label: parallel bars [condition] instruction unit operands;comments 6 operands操作數(shù) 操作數(shù)由常數(shù)、符號(hào)以及常數(shù)與符號(hào)構(gòu)成的表達(dá)式組成。 操作數(shù)之間必須用逗號(hào)隔開(kāi)。 7 comments注釋 ;注釋可以再任何一列開(kāi)始 * 注釋必須在第一列開(kāi)始,線(xiàn)性匯編語(yǔ)言簡(jiǎn)介,線(xiàn)性匯編語(yǔ)句的基本結(jié)構(gòu) 線(xiàn)性匯編中的偽指令 線(xiàn)性匯編資源安排 C代碼轉(zhuǎn)換為線(xiàn)性匯編,線(xiàn)性匯編語(yǔ)句的基本結(jié)構(gòu),基本格式與匯編語(yǔ)言相同,必須是ASCII碼文件,擴(kuò)展名必須是”.sa”,用作匯編優(yōu)化器的輸入文件 Label[[:]] [||] [[register]] mnemonic [unit specifier] [operand list] [;commend],線(xiàn)性匯編中的偽指令,1、調(diào)用一個(gè)函數(shù) .call [ret_reg=]func_name(arg1,arg2)(僅在過(guò)程procedure)內(nèi)有效 2、定義一個(gè)可被匯編優(yōu)化器優(yōu)化,而且可被C/C++當(dāng)做函數(shù)調(diào)用的線(xiàn)性匯編代碼段的偽指令。 label .cproc [vari1[,vari2,…]] 起始 .endproc 結(jié)束 3、定義一個(gè)可被匯編優(yōu)化器優(yōu)化的線(xiàn)性匯編代碼段的偽指令。 label .proc [vari1[,vari2,…]] 起始 .endproc 結(jié)束,線(xiàn)性匯編中的偽指令,4、表明存儲(chǔ)器地址相關(guān)與不相關(guān)的偽指令 .mdep[symbol1],[symbol2] 1,2相關(guān) .no_mdep 其后定義的函數(shù)段內(nèi)存儲(chǔ)器地址不相關(guān) 5、定義變量,或者說(shuō)描述存入寄存器的數(shù)值變量的偽指令: .reg variable1[,variable2,…] 6、過(guò)程的返回值 .return [argument] 7、指出循環(huán)迭代次數(shù)的偽指令 label .trip minimum value,線(xiàn)性匯編資源安排,讀取指令(LDH)必須使用.D單元 乘法指令(MPY)必須使用.M單元 加法指令(ADD)必須使用.L單元 減法指令(SUB)必須使用.S單元 跳轉(zhuǎn)指令(B)必須使用.S單元,C代碼轉(zhuǎn)換為線(xiàn)性匯編,short DP(short *m, short *n, short count) { short i ; short product ; short sum = 0 ; for(i=0;icount;i++) { product = m[i] * n[i] ; sum += product ; } return(sum) ; },C代碼轉(zhuǎn)換為線(xiàn)性匯編,第一步:定義函數(shù)名稱(chēng)、實(shí)現(xiàn)參數(shù)傳遞 short DP(short *m, short *n, short count) .def _DP _DP .cproc cptr0,cptr1,vptr 1).def為definition的縮寫(xiě) 2).cproc表示本函數(shù)是C可調(diào)用函數(shù),其后為所傳遞的參數(shù),C代碼轉(zhuǎn)換為線(xiàn)性匯編,第二步:暫時(shí)存放臨時(shí)數(shù)據(jù)的寄存器定名,由.reg ( register)完成 .reg addr_a,addr_x .reg m,n .reg product,sum,C代碼轉(zhuǎn)換為線(xiàn)性匯編,第三步,數(shù)據(jù)初始化 MV cptr0,addr_a MV cptr1,addr_x ZERO sum 前兩句將數(shù)組a[ ]和x[ ]的首地址存入名為addr_a和addr_x的寄存器變量,以便其后實(shí)現(xiàn)對(duì)數(shù)組的訪(fǎng)問(wèn);最后一句是累加寄存器清零。,C代碼轉(zhuǎn)換為線(xiàn)性匯編,第四步處理程序的循環(huán)體部分 定義一個(gè)標(biāo)號(hào)loop:作為循環(huán)返回的標(biāo)志;然后按照原C程序語(yǔ)句順序改寫(xiě)成匯編語(yǔ)句(不必指定指令執(zhí)行的功能單元): product = m[i] * n[i] ; 改寫(xiě) LDH *addr_a++,m LDH *addr_x++,n MPY m,n,product sum += product ; 改寫(xiě)為 ADD sum,product,sum,C代碼轉(zhuǎn)換為線(xiàn)性匯編,將循環(huán)變量vptr(即count)減一;利用C6x指令的條件執(zhí)行功能通過(guò)對(duì)vptr是否為零的判斷條件執(zhí)行跳轉(zhuǎn)指令: if ( vptr!=0) then B loop 最后,.return實(shí)現(xiàn)數(shù)據(jù)的返回。 一切工作完成后,使用.endproc作為函數(shù)結(jié)束的標(biāo)志。,C代碼轉(zhuǎn)換為線(xiàn)性匯編,.def _DP _DP .cproc cptr0,cptr1,vptr .reg addr_a,addr_x .reg m,n .reg product,sum MV cptr0,addr_a MV cptr1,addr_x ZERO sum loop: LDH *addr_a++,m LDH *addr_x++,n MPY m,n,product ADD sum,product,sum SUB vptr,1,vptr [vptr] B loop .return sum .endproc,C代碼轉(zhuǎn)換為線(xiàn)性匯編,short DP(short *m, short *n, short count) { short i ; int pro_h, pro_l ; int sum_h = 0 ; int sum_l = 0 ; int sum = 0 ; int *data_a = ( int *) m ; int *data_x = ( int *) n ; count = count 1 ; for(i=0;icount;i++) { pro_l = _mpy( data_a[i], data_x[i]) ; pro_h = _mpyh( data_a[i], data_x[i]) ; sum_l += pro_l ; sum_h += pro_h ; } sum = sum_l + sum_h ; return( sum) ; },,.def _DP _DP .cproc cptr0,cptr1,vptr .reg addr_a,addr_x .reg product0,product1,sum0,sum1 .reg m,n MV cptr0,addr_a MV cptr1,addr_x ZERO sum0 ZERO sum1 SHR vptr,1,vptr loop: LDW *addr_a++,m LDW *addr_x++,n MPY m,n,product0 MPYH m,n,product1 ADD sum0,product0,sum0 ADD sum1,product1,sum1 SUB vptr,1,vptr [vptr] B loop ADD sum0,sum1,sum0 .return sum0 .endproc,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- DSP 技術(shù) 應(yīng)用 線(xiàn)性 匯編語(yǔ)言 簡(jiǎn)介
鏈接地址:http://www.820124.com/p-2715611.html