DSP戴明幀主編匯編語(yǔ)言程序設(shè)計(jì)_第1頁(yè)
DSP戴明幀主編匯編語(yǔ)言程序設(shè)計(jì)_第2頁(yè)
DSP戴明幀主編匯編語(yǔ)言程序設(shè)計(jì)_第3頁(yè)
DSP戴明幀主編匯編語(yǔ)言程序設(shè)計(jì)_第4頁(yè)
DSP戴明幀主編匯編語(yǔ)言程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1DSP戴明幀主編匯編語(yǔ)言程序設(shè)計(jì)2分類指令說(shuō)明無(wú)條件分支轉(zhuǎn)移

B[D]

用該指令指定的地址加載PC

BACC[D]

用累加器的低16位指定的地址加載PC條件分支轉(zhuǎn)移

BC[D]

若滿足指令給定條件,用該指令指定的地址加載PC5.1程序的控制與轉(zhuǎn)移第1頁(yè)/共34頁(yè)3分類指令說(shuō)明無(wú)條件調(diào)用

CALL[D]

將返回的地址壓入堆棧,并用該指令指定的地址加載PC

CALA[D]

將返回的地址壓入堆棧,用累加器A或B指定的地址加載PC條件調(diào)用

CC[D]

如果滿足指令給定條件,將返回的地址壓入堆棧,并用該指令指定的地址加載PC分類

指令

說(shuō)明

無(wú)條件返回

RET[D]

將堆棧頂部的返回地址加載到PC。條件返回

RC[D]

如果滿足指令給定條件,將堆棧頂部的返回地址加載到PC。5.1程序的控制與轉(zhuǎn)移第2頁(yè)/共34頁(yè)4操作符號(hào)條件說(shuō)明操作符號(hào)條件說(shuō)明AEQA=0累加器A等于0AOVAOV=1累加器A溢出BEQB=0累加器B等于0BOVBOV=1累加器B溢出ANEQA≠0累加器A不等于0ANOVAOV=0累加器A不溢出BNEQB≠0累加器B不等于0BNOVBOV=0累加器B不溢出ALTA<0累加器A小于0CC=1ALU進(jìn)位位置1BLTB<0累加器B小于0NCC=0ALU進(jìn)位位置0ALEQA≤0累加器A小于等于0TCTC=1測(cè)試/控制標(biāo)志位置1BLEQB≤0累加器B小于等于0NTCTC=0測(cè)試/控制標(biāo)志位置0AGTA>0累加器A大于0BIO

信號(hào)電平為低BGTB>0累加器B大于0NBIO

信號(hào)電平為高AGEQA≥0累加器A大于等于0UNC無(wú)無(wú)條件操作BGEQB≥0累加器B大于等于05.1程序的控制與轉(zhuǎn)移第3頁(yè)/共34頁(yè)第1組第2組A類B類A類B類C類EQ,NEQ,LTLEQ,GT,GEQOVNOVTCNTCCNCBIONBIO組間條件只能“或”第一組兩類條件可以“與”/“或”,但累加器必須是同一個(gè)第二組三類條件可以各選一個(gè)條件“與”/“或”同組同類條件不能選擇兩個(gè)5.1程序的控制與轉(zhuǎn)移第4頁(yè)/共34頁(yè)例5-1條件分支轉(zhuǎn)移

RCTCCCsub,BNEQ

BCnew,AGT,AOV

;TC=1返回,TC=0繼續(xù);B≠0,調(diào)用sub,B=0繼續(xù);A>0且溢出(“與”的關(guān)系),轉(zhuǎn)至new,否則繼續(xù)5.1程序的控制與轉(zhuǎn)移

BCnew,AGT

BCnew,AOV

;A>0,轉(zhuǎn)至new,否則繼續(xù);A溢出,轉(zhuǎn)至new,否則繼續(xù)若例1中兩個(gè)條件相“或”怎么辦?第5頁(yè)/共34頁(yè)7循環(huán)操作5.1程序的控制與轉(zhuǎn)移

.bss x,5;為變量x分配5個(gè)存儲(chǔ)單元 .bss y,1;為變量y分配1個(gè)存儲(chǔ)單元

STM #x,AR1;AR1指向x的首地址 STM #4,AR2;將操作數(shù)#4賦給AR2 LD #0,A;將累加器A清0loop:

ADD *AR1+,A;執(zhí)行加法運(yùn)算,結(jié)果存入累加器A中 BANZ loop,*AR2-;AR2不為0轉(zhuǎn)移,重復(fù)執(zhí)行5次 STL A,@y;將結(jié)果(A的低16位)送往變量y存儲(chǔ)單元 .title "Ex534.asm";為匯編語(yǔ)言源文件取名 .mmregs;定義存儲(chǔ)器映像寄存器stack .usect "STACK",10h;為堆??臻g分配16個(gè)存儲(chǔ)單元

.bss x,5;為變量x分配5個(gè)存儲(chǔ)單元 .bss y,1;為變量y分配1個(gè)存儲(chǔ)單元.defstart;定義標(biāo)號(hào)start.data;定義數(shù)據(jù)代碼table:

.word 1,2,3,4,5;為標(biāo)號(hào)table開始的5個(gè)存儲(chǔ)單元賦值.text;定義文本代碼段start:

STM #0,SWWSR;SWWSR置0,不插等待周期 STM #stack+10h,SP;設(shè)置堆棧指針

CALL init;調(diào)用子程序init

STM #x,AR1;將變量x的首地址賦給AR1 STM #4,AR2;將操作數(shù)#4賦給AR2 LD #0,A;將累加器A清0loop:

ADD *AR1+,A;執(zhí)行加法運(yùn)算,結(jié)果存入累加器A中 BANZ loop,*AR2-;AR2不為0轉(zhuǎn)移,重復(fù)執(zhí)行5次 STL A,@y;將結(jié)果(A的低16位)送往變量y存儲(chǔ)單元init:STM #x,AR1;AR1指向x的首地址 RPT #4;重復(fù)執(zhí)行下條指令5次 MVPD table,*AR1+;重復(fù)傳遞共5個(gè)數(shù)據(jù)

RET;子程序返回.end;源程序結(jié)束第6頁(yè)/共34頁(yè)利用CMPR指令進(jìn)行比較操作指定的ARx寄存器(x=1~7)與AR0比較,測(cè)試條件成立TC置1。例:5-3比較操作后條件分支轉(zhuǎn)移5.1程序的控制與轉(zhuǎn)移STM#5,AR1;(AR1)=5

STM#10,AR0;(AR0)=10loop:……MAR*AR1+;AR1=AR1+1……CMPRLT,AR1;若AR1-AR0<0,則TC=1,否則為0

BCloop,TC;若AR1-AR0<0,則循環(huán)

若AR1=AR0,則順序執(zhí)行第7頁(yè)/共34頁(yè)5.2堆棧的使用方法特點(diǎn):16位堆棧指針SP向堆棧中壓入數(shù)據(jù)時(shí),堆棧指針從高地址向低地址移動(dòng)壓入堆棧時(shí),先SP-1,再壓入數(shù)據(jù);彈出操作數(shù)時(shí),先彈出數(shù)據(jù),后SP+1

9設(shè)置好堆棧后,就可以使用堆棧了,如:CALLpmad;(SP)-1→SP,(PC)+2→TOS,pmad→PCRET;(TOS)→PC,(SP)+1→SP

第8頁(yè)/共34頁(yè)5.3加、減法和乘法運(yùn)算例5-4計(jì)算z=x+y-w使用:加法指令A(yù)DD,減法指令SUB10LD@x,AADD@y,ASUB@w,ASTLA,@z;取x值,A=x;完成x+y運(yùn)算,A=x+y;完成x+y-w運(yùn)算,A=x+y-w;計(jì)算結(jié)果(A的低16位)存入變量z中第9頁(yè)/共34頁(yè)5.3加、減法和乘法運(yùn)算例5-5計(jì)算y=mx+b使用:乘法指令MPY,加法指令A(yù)DD11LD@m,TMPY@x,AADD@b,ASTLA,@y;取系數(shù)m值,T=m;完成mx乘積,A=mx;完成mx+b運(yùn)算,A=mx+b;計(jì)算結(jié)果B的低16位存入y中第10頁(yè)/共34頁(yè)5.3加、減法和乘法運(yùn)算例5-6計(jì)算y=x1*a1+x2*a2使用:乘法指令MPY,乘法累加指令MAC12LD@x1,TMPY@a1,ALD@x2,TMAC@a2,ASTLA,@ySTHA,@y+1;取變量值x1,T=x1;完成乘法x1a1運(yùn)算,A=x1a1;取變量值x2,T=x2;乘法累加,A=x1a1+x2a2;計(jì)算結(jié)果的低字AL存入y中;計(jì)算結(jié)果的高字AH存入y+1中第11頁(yè)/共34頁(yè)5.3加、減法和乘法運(yùn)算例5-7計(jì)算使用:乘法累加指令MAC,重復(fù)執(zhí)行下條指令RPT13第12頁(yè)/共34頁(yè)14加法/減法指定堆??臻g為變量預(yù)留空間初值序列初始化變量設(shè)置堆棧指針利用MAC和RPT求乘累加和第13頁(yè)/共34頁(yè)15

.title"Ex_543.asm“;為匯編語(yǔ)言源文件取名 .mmregs;定義存儲(chǔ)器映像寄存器stack .usect "STACK",10H;為堆棧空間分配16個(gè)存儲(chǔ)單元 .bss

a,4;為系數(shù)a分配4個(gè)存儲(chǔ)單元 .bss x,4;為變量x分配4個(gè)存儲(chǔ)單元 .bss y,1;為變量y分配1個(gè)存儲(chǔ)單元 .def start;定義標(biāo)號(hào)start .data;定義數(shù)據(jù)代碼table: .word 1,2,3,4;為標(biāo)號(hào)table開始的 .word 8,6,4,2;8個(gè)存儲(chǔ)單元賦值 .text;定義文本代碼段start: STM #0,SWWSR;SWWSR置0,不插等待周期 STM #stack+10H,SP;設(shè)置堆棧指針 STM #a,AR1;AR1指向a的首地址 RPT #7;重復(fù)執(zhí)行下條指令8次 MVPD table,*AR1+;從程序存儲(chǔ)器向數(shù)據(jù)存儲(chǔ)器,重復(fù)傳遞共8個(gè)數(shù)據(jù)

CALL SUM;調(diào)用子程序SUMend: B end;循環(huán)等待SUM: STM #a,AR3;將系數(shù)a的首地址賦給AR3 STM #x,AR4;將變量x的首地址賦給AR4 RPTZ A,#3;將累加器清0,重復(fù)執(zhí)行下條指令4次 MAC *AR3+,*AR4+,A;執(zhí)行乘法累加運(yùn)算,結(jié)果存入累計(jì)器A中 STL A,@y;將結(jié)果(A的低16位)送往變量y存儲(chǔ)單元 RET;子程序返回 .end;源程序結(jié)束第14頁(yè)/共34頁(yè)【例5-8】在例5-7的4項(xiàng)乘積aixi(i=1,2,3,4)中找出最大值,并存放累加器A中。

程序:

STM#a,AR1STM#x,AR2STM#2,AR3LD*AR1+,TMPY*AR2+,Aloop1:LD*AR1+,TMPY*AR2+,BMAXABANZloop1,*AR3-;系數(shù)a的首地址賦給AR1;變量x的首地址賦給AR2;設(shè)置計(jì)數(shù)器AR3=2;取系數(shù)T=a1,并修改AR1;乘法運(yùn)算A=a1x1,并修改AR2

;取系數(shù)T=ai,并修改AR1;乘法運(yùn)算B=aixi,并修改AR2

;求A和B中的最大值,結(jié)果存入A;若AR3≠0,則循環(huán),并修改AR3

若AR3=0,則順序執(zhí)行5.3加、減法和乘法運(yùn)算第15頁(yè)/共34頁(yè)175.4重復(fù)操作例5-9對(duì)一個(gè)數(shù)組進(jìn)行初始化X[5]={0,0,0,0,0}第16頁(yè)/共34頁(yè)【例5-9】對(duì)數(shù)組進(jìn)行初始化,使x[5]={0,0,0,0,0}。.bssx,5STM#x,AR1LD#0,ARPT#4STLA,*AR1+

.bssx,5STM#x,AR1

RPTZA,#4STLA,*AR1+注意:

①對(duì)x[5]中的5個(gè)元素置0,重復(fù)次數(shù)為4,即執(zhí)行1次STLA,AR1+指令后,再重復(fù)執(zhí)行4次;②RPTZ指令設(shè)定重復(fù)次數(shù)后,再對(duì)累加器清零。

5.4重復(fù)操作第17頁(yè)/共34頁(yè)19塊重復(fù)操作例5-10對(duì)數(shù)組X[5]中每個(gè)元素加1第18頁(yè)/共34頁(yè)例5-10對(duì)數(shù)組x[5]中的每一元素加1。

.bssx,5begin:LD#1,BSTM#4,BRCSTM#x,AR4RPTBnext-1ADD*AR4,B,ASTLA,*AR4+next:LD#0,B…;設(shè)置數(shù)組空間;立即數(shù)1送入B;設(shè)置重復(fù)次數(shù),BRC=4,循環(huán)5次;數(shù)組首地址x送入AR4;設(shè)置循環(huán)結(jié)束地址;數(shù)組數(shù)據(jù)與B相加,結(jié)果存入A中;存儲(chǔ)數(shù)組結(jié)果,并修改地址;B清0塊重復(fù)操作第19頁(yè)/共34頁(yè)215.5數(shù)據(jù)塊傳送數(shù)據(jù)傳送指令的特點(diǎn):①

傳送速度比加載和存儲(chǔ)指令要快;②數(shù)據(jù)傳送不通過(guò)累加器;③

可尋址程序存儲(chǔ)器;④與RPT結(jié)合,可實(shí)現(xiàn)數(shù)據(jù)塊傳送。

第20頁(yè)/共34頁(yè)225.5數(shù)據(jù)塊傳送第21頁(yè)/共34頁(yè)例5-11數(shù)組X[5]={1,2,3,4,5}初始化(程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器之間的數(shù)據(jù)傳送)23

.data

TBL:.word1,2,3,4,5.bssx,5 .textSTART:STM#x,AR5

RPT#4 MVPDTBL,*AR5+ …;定義數(shù)據(jù)代碼段;為標(biāo)號(hào)TBL開始的5個(gè)存儲(chǔ)單元賦初值;為變量x分配5個(gè)存儲(chǔ)單元;定義文本代碼段;將變量x的首地址賦給AR5;將下條指令重復(fù)執(zhí)行5次;將數(shù)據(jù)送入X對(duì)應(yīng)地址單元中5.5數(shù)據(jù)塊傳送第22頁(yè)/共34頁(yè)例5-12編寫一段程序?qū)?shù)據(jù)存儲(chǔ)器中的數(shù)組x[20]復(fù)制到數(shù)組y[20]。(數(shù)據(jù)存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器之間的數(shù)據(jù)傳送)24

.bssx,20 .bssy,20 .text LD#x,AR2 LD#y,AR3 RPT#19 MVDD*AR2+,*AR3+…..;為變量x分配20個(gè)存儲(chǔ)單元;為變量y分配20個(gè)存儲(chǔ)單元;定義文本代碼段;將變量x的首地址賦給AR2;將變量y的首地址賦給AR3;將下條指令重復(fù)執(zhí)行20次;將((AR2))((AR3))5.5數(shù)據(jù)塊傳送第23頁(yè)/共34頁(yè)用雙操作數(shù)指令編程的特點(diǎn):①單周期內(nèi)通過(guò)C總線和D總線尋址兩個(gè)數(shù)據(jù)②用間接尋址方式獲得操作數(shù),且只能用AR2~AR5③占用的程序空間?、苓\(yùn)行的速度快255.6雙操作數(shù)乘法指令功能MPYXmem,Ymem,dst

dst=Xmem*YmemMACXmem,Ymem,scr[dst]

dst=scr+Xmem*YmemMASXmem,Ymem,scr[dst]

dst=scr-Xmem*YmemMACPSmem,Pmad,scr[dst]

dst=scr+Smem*Pmad表5-3MAC型雙操作數(shù)指令尋址方式:*ARn、*ARn+、*ARn-、*ARn+0%第24頁(yè)/共34頁(yè)編制求解的程序段。265.6雙操作數(shù)乘法

單操作數(shù)指令方案雙操作數(shù)指令方案LD#0,BLD#0,B STM#a,AR2STM#a,AR2 STM#x,AR3STM#x,AR3 STM#19,BRCSTM#19,BRC RPTBdone-1RPTBdone-1 LD*AR2+,TMPY*AR2+,*AR3+,A3TMPY*AR3+,A2TADDA,B ADDA,Bdone:STHB,@ydone:STHB,@y STLB,@y+1STLB,@y+1

節(jié)省的總機(jī)器周期數(shù)=1T*N(迭代次數(shù))=NT。第25頁(yè)/共34頁(yè)進(jìn)一步優(yōu)化的程序段。利用雙操作數(shù)指令進(jìn)行乘法累加運(yùn)算,完成N項(xiàng)乘積求和需2N個(gè)機(jī)器周期。如果將乘法累加器單元、多總線以及硬件循環(huán)操作結(jié)合在一起,可以形成一個(gè)優(yōu)化的乘法累加程序。完成一個(gè)N項(xiàng)乘積求和的操作,只需要N+2個(gè)機(jī)器周期。程序如下:275.6雙操作數(shù)乘法

STM#x,AR2STM#a,AR3RPTZA,#19;2個(gè)機(jī)器周期MAC*AR2+,*AR3+,A;1個(gè)機(jī)器周期STHA,@ySTLA,@y+1第26頁(yè)/共34頁(yè)28作業(yè)1、編寫的程序,并注釋2、編寫對(duì)數(shù)組X[8]={1,2,3,4,5,6,7,8}的初始化程序,并注釋第27頁(yè)/共34頁(yè)長(zhǎng)字運(yùn)算C54x可以利用長(zhǎng)操作數(shù)(32位)進(jìn)行長(zhǎng)字運(yùn)算。295.7長(zhǎng)字運(yùn)算和并行運(yùn)算

長(zhǎng)字指令

DLDLmem,dstDSTsrc,LmemDADDLmem,src[,dst]DSUBLmem,src[,dst]DRSUBLmem,src[,dst];dst=Lmem單周期;Lmem=src雙周期;dst=src+Lmem單周期;dst=src-Lmem單周期;dst=Lmem-src單周期第28頁(yè)/共34頁(yè)長(zhǎng)操作數(shù)在存儲(chǔ)器的排列方法

偶地址排列法

?指令中給出的地址為偶地址?存儲(chǔ)器中低地址存放高16位?存儲(chǔ)器中高地址存放底16位奇地址排列法

?指令中給出的地址為奇地址?存儲(chǔ)器中低地址存放低16位?存儲(chǔ)器中高地址存放高16位305.7長(zhǎng)字運(yùn)算和并行運(yùn)算第29頁(yè)/共34頁(yè)315.7長(zhǎng)字運(yùn)算和并行運(yùn)算

偶地址排列法舉例?DLD*AR3+,A

執(zhí)行前:

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論