版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第4章 TMS320C54x的軟件開發(fā),4.1 TMS320C54x軟件開發(fā)過程 4.2 匯編語言程序的編寫方法 4.3 匯編偽指令和宏指令 4.4 公共目標文件格式COFF 4.5 匯編源程序的編輯、匯編和鏈接 4.6 匯編語言程序設計,4.6 匯編語言程序設計 基本程序設計分為3大類: (1) 程序的控制與轉移。 (2) 數(shù)據(jù)塊傳送程序。 (3) 算術運算類程序。,4.6.1 程序的控制與轉移 包括:分支轉移 子程序操作(調用與返回程序) 循環(huán)控制(重復操作) 這些指令都將影響程序計數(shù)器(PC),會造成把一個不是順序增加的地址加載到PC。表43P111,條件:有一些指令只有當一個條件或多個
2、條件得到滿足時才能執(zhí)行。如條件分支轉移或條件調用、條件返回指令。表4-4P112。 多重條件 :BC pmad, cond,cond,cond,當這條指令的所有條件得到滿足時,程序才能轉移到pmad。不是所有條件都能構成多重條件,某些條件的組合如表4-5所示。 -P113,1. 分支轉移 根據(jù)條件判斷改寫PC值,使程序發(fā)生分支轉移。 兩種形式:有條件分支轉移和無條件轉移。 常用指令: BD、BACCD ;BCD、BANZD BACC: Branch to Location Specified by Accumulator BANZ: Branch on Auxiliary Register N
3、ot Zero 合理地設計延遲轉移指令,可以提高程序的效率。應當注意,緊跟在延遲指令后面的兩個字,不能是造成PC不連續(xù)的指令(如分支轉移、調用、返回或軟件中斷指令)。,【例4.11】 條件分支轉移指令BC舉例。 BC new, AGT, AOV ; 若累加器A0且溢出,則轉至new,否則往下執(zhí)行 單條指令中的多個條件是“與”的關系。 如果需要兩個條件相“或”,只能寫成兩條指令。如上一條指令改為“若累加器A大于0或溢出,則轉移至new”,可以寫成如下兩條指令 BC new, AGT BC new, AOV,【例4.12】 計算 .bss x, 5 ;為變量分配6個字的存儲空間 .bss y, 1
4、 STM #x, AR1 ;AR1指向x STM #4, AR2 ;設AR2初值為4 LD #0, A loop: ADD *AR1+, A BANZ loop, *AR2- ;當AR2不為0時轉移,AR2-1AR2 STL A, y 本例中用AR2作為循環(huán)計數(shù)器,設初值為4 AR2取值為4,3,2,1,0,2. 調用與返回指令 當調用子程序或函數(shù)時,DSP就會中斷原先的程序,轉移到程序存儲器的其他地址繼續(xù)運行。調用時,下條指令的地址被壓入堆棧,以便返回時將這個地址彈出至PC,使中斷的程序繼續(xù)執(zhí)行。 兩種形式: 無條件調用與返回,有條件調用與返回。 常用指令: CALLD、CALAD、CCD、
5、 RETD、 RCD CALA:Call to accumulator address CC:Conditional call RC:Conditional return,例如(堆棧設置后) CALL pmad ;(SP)-1SP,(PC)+2TOS, pmadPC RET ;(TOS)PC, (SP)+1SP 堆棧: 16位堆棧指針(SP)尋址的軟件堆棧。 堆棧是一個特殊的存儲區(qū)域,遵循先進后出的原則,當向堆棧中壓入數(shù)據(jù)時,堆棧從高地址向低地址增長,堆棧指針SP始終指向棧頂。 堆棧用法: 壓入操作:SP先減1,然后再將數(shù)據(jù)壓入棧頂。 彈出操作:數(shù)據(jù)彈出后,再將SP加1。,堆棧設置: size
6、.set100 stack.usect“STK”, size ;自定義一個名為STK的保留空間,共100個單元 STM #stack+size, SP ;將這個保留空間的高地址+1(#stack+size)賦給SP,作為棧底。,3. 重復操作( 3條指令) RPT(重復下條指令)、 RPTZ(累加器清0并重復下條指令) RPTB(塊重復指令)。 (1) 重復執(zhí)行單條指令 含義:RPT或RPTZ允許重復執(zhí)行緊隨其后的那一條指令。 重復次數(shù):如重復執(zhí)行n次,則重復指令中計數(shù)值為n1。 說明:與BANZ指令進行循環(huán)相比,效率要高得多。 特別是對于那些乘法累加和數(shù)據(jù)傳送的多周期指令(如MAC、MVDK
7、、MVDP和MVPD等),在執(zhí)行一次之后就變成了單周期指令,大大提高了運行速度。,【例4.13】 對數(shù)組進行初始化。x5=0,0,0,0,0 主要程序(部分)如下: .bss x, 5 STM #x, AR1 LD #0, A RPT #4 STL A, *AR1+ 或者 .bss x, 5 STM #x, AR1 RPTZ A, #4 STL A, *AR1+,(2) 塊程序重復操作RPTB 含義:RPTB將重復操作的范圍擴大到任意長度的循環(huán)回路。 重復次數(shù):先加載到塊重復計數(shù)器(BRC)。 循環(huán)開始地址(RSA):是RPTB指令的下一行; 結束地址(REA):由RPTB指令的操作數(shù)規(guī)定。
8、特點: 對任意長的程序段的循環(huán)開銷為0; 其本身是一條2字4周期指令; RPT指令一旦執(zhí)行,不會停止操作,即使有中斷請求也不響應;而RPTB指令是可以響應中斷的。,【例4.14】 對數(shù)組x5中的每個元素加1。 .bss x, 5 begin: LD #1, 16, B STM #4,BRC ;BRC賦值為4 STM #x,AR4 RPTB next-1 ;next-1為循環(huán)結束地址 ADD *AR4,16,B,A STH A,*AR4+ next: LD #0, B 用next1作為結束地址是恰當?shù)摹H绻醚h(huán)回路中最后一條指令(STH指令)的標號作為結束地址,若最后一條指令是單字指令也可以,
9、若是雙字指令,就不對了。,(3) 循環(huán)的嵌套(三重循環(huán)嵌套、開銷-p116),問題:外層循環(huán)為何不采用RPTB實現(xiàn)?,1st:,1,4.6.2 數(shù)據(jù)塊傳送程序 共有4種類型(10條指令): (1) 程序存儲器數(shù)據(jù)存儲器(MVPD,MVDP)。 (2) 數(shù)據(jù)存儲器數(shù)據(jù)存儲器(MVDK,MVKD,MVDD)。 (3) 數(shù)據(jù)存儲器MMR(MVMD、MVDM,MVMM) (4) 程序存儲器(由ACC尋址)數(shù)據(jù)存儲器(READA,WRITA) MVDP Smem, pmad MVMD MMR, dmad MVDD Xmem, Ymem MVMM MMRx, MMRy MVDK Smem, dmad RE
10、ADA Smem,這些指令的特點如下: 傳送速度比加載和存儲指令要快; 傳送數(shù)據(jù)不需要通過累加器; 可以尋址程序存儲器; 與RPT相結合時,都變成單周期指令,可以實現(xiàn)數(shù)據(jù)塊傳送。,【例4.15】 編寫一段程序,首先對數(shù)組x20賦值,再將數(shù)據(jù)存儲器中的數(shù)組x20復制到數(shù)組y20。 .title“exp15.asm” .mmregs STACK .usect “STACK”, 30h .bss x, 20 .bss y, 20 .data table: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 .defstart .text,
11、Start: STM #x, AR1 RPT#19 MVPD table, *AR1+; 從程序存儲器傳送到數(shù)據(jù)存儲器 ; 程序存儲器指針自動下移 STM #x, AR2 STM #y, AR3 RPT #19 MVDD *AR2+, *AR3+ ; 從數(shù)據(jù)存儲器傳送到數(shù)據(jù)存儲器 end: B end .end,MVDD Xmem, Ymem 注意:雙操作數(shù)指令只能用輔助寄存器AR2AR5進行間接尋址獲得操作數(shù),/ exp15.cmd*/鏈接命令 vectors.obj exp15.obj -o exp15.out -m exp15.map -e start MEMORY PAGE 0: EP
12、ROM:org=0E000hlen=01F80h VECS:org=0FF80hlen=00080h PAGE 1: SPRAM:org=00060hlen=00030h DARAM:org=00090hlen=01380h ,SECTIONS .vectors:VECSPAGE 0 .data: EPROMPAGE 0 .text: EPROMPAGE 0 .bss: SPRAMPAGE 1 .STACK: DARAMPAGE 1 實現(xiàn)20個數(shù)據(jù)先從EPROM的0E000Hh0E013h傳送到數(shù)據(jù)存儲器SPRAM的0060h0073h單元,實現(xiàn)數(shù)據(jù)的初始化,再從0060h0073h單元傳送到
13、0074h0087h單元,實現(xiàn)數(shù)據(jù)搬移,其示意圖如圖4.7所示。注意,實際看到的是十六進制數(shù)。,4.6.3 算術運算類程序 單字運算(16位) 長字運算(32位) 小數(shù)運算 浮點運算 雙操作數(shù)乘法 DSP表示整數(shù)時,分為有符號數(shù)和無符號數(shù)兩種格式。 DSP表示小數(shù)時,其符號和上面整數(shù)的表示一樣,但是必須注意如何安排小數(shù)點的位置。,單字運算 【例4.16】 試編一程序,計算 的值,并找出4項乘積 (i=1,2,3,4)中的最大值,放入累加器A中。 .title“exp16.asm” .mmregs STACK .usect “STACK”, 10h ;堆棧的設置 .bss a, 4 ;為變量分配
14、10個字的存儲空間 .bss x, 4 .bss y1, 1 .bss y2, 1 .def start .data table: .word 1, 5, 3, 4 .word 8, 6, 7, 2 .text,start: STM #0, SWWSR ;插入個等待狀態(tài) STM #STACK+10h,SP ;設置堆棧指針 STM #a, AR1 RPT #7 MVPD table, *AR1+ CALL SUM ;調用乘累加子程序 CALL MAX ;調用求最大值子程序 end: B end SUM: STM#a, AR3 STM#x, AR4 RPTZA, #3 MAC*AR3+, *AR4
15、+, A STLA, y1 ;變量y1存放乘累加的值 RET,MAX: STM #a, AR1 STM #x, AR2 STM #2,AR3 LD *AR1+, T MPY *AR2+, A ;第一個乘積在累加器A中 Loop: LD *AR1+, T MPY *AR2+, B ;其他乘積在累加器B中 MAX A ;累加器A和B比較,選大的存在A中 BANZ loop, *AR3- ;此循環(huán)中共進行3次乘法和比較 STL A, y2 ;變量y2存放的最大值 RET .end,2. 長字運算 可以利用長操作數(shù)(32位)進行長字運算。 長字指令如下: 長字運算指令DADD、DSUB、DRSUB等
16、(見表3.10P69); (2) 長字存儲和裝入指令DST、DLD (見表3.20、3.21P79-80)。 除DST指令(存儲32位數(shù)要用E總線2次,需要2個機器周期)外,其余都是單字單周期指令,也就是在單個周期內同時利用C總線和D總線,得到32位操作數(shù)。,32位乘法運算:只能利用16位乘法指令完成。 X1 X0 S U *Y1 Y0 *S U - X0 *Y0 U * U Y1 *X0 S * U X1 *Y0 S * U Y1 *X1 S * S - W3 W2 W1 W0 S U U U 3條乘法指令: UU: MPYU Smem, dst; dst=U (T)*U(Smem) SU:
17、 MACSU Xmem, Ymem, Src; Src= U(Xmem)* S(Ymem)+Src SS: MAC Xmem, Ymem,Src ; Src=S(Xmem)*S(Ymem)+Src,【例4.18】 編寫計算W64=X32Y32的程序。 .title“exp18.asm” .mmregs STACK.usect“STACK”,10H .bss x, 2 ;32位占2字空間 .bss y, 2 ;32位占2字空間 .bss w0, 1 .bss w1, 1 .bss w2, 1 .bss w3, 1 .def start .data table: .word 10h, 20h, 3
18、0h, 40h .text,start:STM #0, SWWSR STM #STACK+10H, SP STM #x, AR1 RPT #3 MVPD table, *AR1+ ;初始化x,y STM #x, AR2 STM #y, AR3 LD *AR2,T ;T=x0 MPYU *AR3+, A ;A=x0y0 (UU) STL A,w0 ;w0=(x0y0低16位),LD A, -16,A ;A右移16位,A高位A低位 MACSU *AR2+, *AR3-, A ;A+=y1x0(SU) MACSU *AR3+, *AR2, A ;A+=x1y0(SU) STL A, w1 ;w1=A
19、 LD A, -16, A ;A右移16位,A高位A低位 MAC *AR3,*AR2, A ;A+=x1y1(SS) STL A, w2 ;w2=A的低16位 STH A, w3 ;w3=A的高16位 End: B end .end,結果W1=0A00h,編寫計算W64=X32Y32的程序 給程序設置新的測試數(shù)據(jù): .word 0 x1170,0 x0001,0 xFFFD,0 xFFFF ; x=7000,y=-3 執(zhí)行結果: W3=FFFF,W2=FFFF,W1=FFFC,W0=CBB0 FFFF,FFFF,FFFC,CBB0是-21000的補碼表示 測試結果: 乘數(shù):S U 、結果: S
20、 U U U規(guī)定為32bit,64bit整數(shù)的補碼表示,3. 小數(shù)運算 兩個16位整數(shù)相乘:乘積總是“向左增長”。這意味著多次相乘后乘積將會很快超出定點器件的數(shù)據(jù)范圍。 兩個小數(shù)相乘:乘積總是“向右增長”。這就意味著超出定點器件數(shù)據(jù)范圍的將是不太感興趣的部分。,1) 小數(shù)的表示方法 采用2的補碼表示小數(shù):最高位為符號位,數(shù)值范圍從1+1(Q15格式)。 MSB LSB 0/1(符號位) . 2-1 2-2 2-15,如: 0100,0000,0000,0000B=4000H=0.5 0110,0000,0000,0000B=6000H=0.75,十進制小數(shù)的2的補碼表示:由十進制小數(shù)乘以327
21、68后,再將其整數(shù)部分轉換成十六進制。 如: -0.5:|-0.5|32768 再求反+1 |-0.5|32768 =0100,0000,0000,0000 1011,1111,1111,1111 + 1 - 1100,0000,0000,0000,匯編語言程序中,十進制小數(shù)的表示: 小數(shù)0.123.Word 32768*123/1000,例:0.5*-0.375 0.5=0100B -0.375=(0011B)+1=1100+1=1101B 0100 1101 - 0100 0000 0100 1100 - 1110100 (-0.1875的補碼),-0.1875 =(00011B+1) =
22、11100+1 =11101,這個結果送入累加器前,必須進行符號位擴展,結果為: 11110100,2) 小數(shù)乘法中的冗余符號位 問題:兩個帶符號小數(shù)相乘,將出現(xiàn)得到的積帶有兩位符號位。 解決冗余符號位的辦法:在程序中設定狀態(tài)寄存器ST1中的FRCT(小數(shù)方式)位為1,在乘法器將結果傳送至累加器時就能自動地左移1位,消去了兩個帶符號數(shù)相乘時產生的冗余符號位。 小數(shù)乘法編程時:應當先設置FRCT位: SSBX FRCT MPY *AR2,*AR3,A STH A, Z,【例4.19】 編制計算 的程序段,其中數(shù)據(jù)均為小數(shù)。 .title“exp19.asm” .mmregs STACK .use
23、ct “STACK”,10H .bss a, 4 .bss x, 4 .bss y, 1 .data table: .word 1*32768/10 .word 2*32768/10 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word -2*32768/10,start: SSBX FRCT;小數(shù)方式位FRCT1, 結果自動左移1位 STM #a, AR1 RPT #7 MVPD table, *AR1+ ;初始化ai,xi STM #x, AR2 STM #a
24、, AR3 RPTZ A, #3 MAC *AR2+, *AR3+, A STH A, y ;乘積向右增長,丟棄低16位乘積結果 end: B end .end 計算結果為y=1eb7h=0.24。,4. 雙操作數(shù)乘法 含義:允許在一個機器周期內通過兩個16位數(shù)據(jù)總線(C總線和D總線)尋址兩個數(shù)據(jù)和系數(shù),圖4.9。 特點: 用間接尋址方式獲得操作數(shù),且輔助寄存器只能用AR2AR5 尋址方式:*ARn、*ARn+、*ARn-、*ARn+0%。 比較p57,62指令碼格式 (2) 占用的程序空間小。 (3) 運行的速度快。 雙操作數(shù)MAC形式的指令有4種,表4-7p126。,【例4.21】 求解
25、的程序段p127。 程序(部分)如下: STM#a, AR2 STM#x, AR3 RPTZ A,#19;1個機器周期 MAC *AR2+, *AR3+,A;1個機器周期 STH A,y STL A,y+1 效果:單操作數(shù)需3NT+1 (例4.20) 雙操作數(shù)需2NT+4+1(例4.20) 使用MAC 的雙操作數(shù)只需要(N+1)T(例4.21 ),5. 浮點運算 1) 浮點數(shù)的表示方法 浮點數(shù)由尾數(shù)和指數(shù)兩部分組成. 定點數(shù)=尾數(shù)2(指數(shù)) 浮點數(shù)的尾數(shù)和指數(shù)可正可負,均用補碼表示。 指數(shù)的范圍從831。 例如,定點數(shù)0 x2000(0.25)用浮點數(shù)表示時, 尾數(shù)為0 x4000(0.5),
26、指數(shù)為1, 即 0.25=0.521,2) 定點數(shù)轉換為浮點數(shù)(3條指令) EXP src 功能:提取指數(shù)。計算src的指數(shù)值并存放于T寄存器中。 指數(shù)值通過計算src的冗余符號位數(shù)并減8得到,冗余符號位數(shù)等于去掉40位src中除符號位以外的有效位所需左移的位數(shù)。累加器src中的內容不變。指數(shù)的數(shù)值范圍是831。 例如: EXP A,0CH=1100B,所以累加器A中左端有8*4+2=34位為1,去除1位符號位,冗余符號位=33,指數(shù)=33-8=25=0019H, ST T,EXPONENT 將保存在T寄存器中的指數(shù)存放到數(shù)據(jù)存儲器的指定單元中。 NORM src ,dst 將src中有符號數(shù)左移TS位,結果存放在dst中得到尾數(shù)。 該指令常與EXP指令結合使用,完成歸一化處理。 例如: NORM A,3) 浮點數(shù)轉換為定點數(shù): 按指數(shù)值將尾數(shù)右移(指數(shù)為負時是左移),【例4.22】 編寫浮點乘法程序,完成x1x20.3(0.8)的運算。要求包括將定點數(shù)轉換成浮點數(shù)、浮點乘法,最后再將浮點數(shù)轉換成定點數(shù)。 程序中保留10個數(shù)據(jù)存儲單元: x1(被乘數(shù)) el(被乘數(shù)的指數(shù)) m1(被乘數(shù)的尾數(shù)) x2(乘數(shù)) e2(乘數(shù)的指數(shù)) m2(乘數(shù)的尾數(shù)) product(乘積) ep(乘積的指數(shù)) mp(乘積的尾數(shù)) temp(暫存單
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 油品儲運調合工崗前工作質量考核試卷含答案
- 物料輸送及煙氣凈化工安全規(guī)程測試考核試卷含答案
- 2025年東遼縣事業(yè)單位聯(lián)考招聘考試歷年真題附答案
- 2024年湖南九嶷職業(yè)技術學院馬克思主義基本原理概論期末考試題附答案
- 2024年溫州市工人業(yè)余大學馬克思主義基本原理概論期末考試題附答案
- 2024年運城市特崗教師招聘考試真題匯編附答案
- 2024年萊蕪市直機關遴選公務員考試真題匯編附答案
- 2025年美容美甲行業(yè)操作規(guī)范手冊
- 2024年重慶化工職業(yè)學院馬克思主義基本原理概論期末考試題附答案
- 2025四川省公務員考試常識判斷專項練習題及答案1套
- 呼吸機相關肺炎預防策略指南2026
- 2026年內蒙古白音華鋁電有限公司招聘備考題庫帶答案詳解
- 2025年玉溪市市直事業(yè)單位選調工作人員考試筆試試題(含答案)
- 2026年游戲AB測試實施方法含答案
- 2025湖南湘西鶴盛原煙發(fā)展有限責任公司招聘擬錄用人員筆試歷年備考題庫附帶答案詳解
- 江蘇省2025年普通高中學業(yè)水平合格性考試英語試卷(含答案)
- 枕骨骨折的護理課件
- TCEC電力行業(yè)數(shù)據(jù)分類分級規(guī)范-2024
- GB/T 26951-2025焊縫無損檢測磁粉檢測
- 2025及未來5-10年高壓管匯項目投資價值市場數(shù)據(jù)分析報告
- 腹部手術圍手術期疼痛管理指南(2025版)課件
評論
0/150
提交評論