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