版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
會計學1DSP戴明幀主編匯編語言程序設計2分類指令說明無條件分支轉移
B[D]
用該指令指定的地址加載PC
BACC[D]
用累加器的低16位指定的地址加載PC條件分支轉移
BC[D]
若滿足指令給定條件,用該指令指定的地址加載PC5.1程序的控制與轉移第1頁/共34頁3分類指令說明無條件調用
CALL[D]
將返回的地址壓入堆棧,并用該指令指定的地址加載PC
CALA[D]
將返回的地址壓入堆棧,用累加器A或B指定的地址加載PC條件調用
CC[D]
如果滿足指令給定條件,將返回的地址壓入堆棧,并用該指令指定的地址加載PC分類
指令
說明
無條件返回
RET[D]
將堆棧頂部的返回地址加載到PC。條件返回
RC[D]
如果滿足指令給定條件,將堆棧頂部的返回地址加載到PC。5.1程序的控制與轉移第2頁/共34頁4操作符號條件說明操作符號條件說明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進位位置1BLTB<0累加器B小于0NCC=0ALU進位位置0ALEQA≤0累加器A小于等于0TCTC=1測試/控制標志位置1BLEQB≤0累加器B小于等于0NTCTC=0測試/控制標志位置0AGTA>0累加器A大于0BIO
低
信號電平為低BGTB>0累加器B大于0NBIO
高
信號電平為高AGEQA≥0累加器A大于等于0UNC無無條件操作BGEQB≥0累加器B大于等于05.1程序的控制與轉移第3頁/共34頁第1組第2組A類B類A類B類C類EQ,NEQ,LTLEQ,GT,GEQOVNOVTCNTCCNCBIONBIO組間條件只能“或”第一組兩類條件可以“與”/“或”,但累加器必須是同一個第二組三類條件可以各選一個條件“與”/“或”同組同類條件不能選擇兩個5.1程序的控制與轉移第4頁/共34頁例5-1條件分支轉移
RCTCCCsub,BNEQ
BCnew,AGT,AOV
;TC=1返回,TC=0繼續(xù);B≠0,調用sub,B=0繼續(xù);A>0且溢出(“與”的關系),轉至new,否則繼續(xù)5.1程序的控制與轉移
BCnew,AGT
BCnew,AOV
;A>0,轉至new,否則繼續(xù);A溢出,轉至new,否則繼續(xù)若例1中兩個條件相“或”怎么辦?第5頁/共34頁7循環(huán)操作5.1程序的控制與轉移
.bss x,5;為變量x分配5個存儲單元 .bss y,1;為變量y分配1個存儲單元
STM #x,AR1;AR1指向x的首地址 STM #4,AR2;將操作數#4賦給AR2 LD #0,A;將累加器A清0loop:
ADD *AR1+,A;執(zhí)行加法運算,結果存入累加器A中 BANZ loop,*AR2-;AR2不為0轉移,重復執(zhí)行5次 STL A,@y;將結果(A的低16位)送往變量y存儲單元 .title "Ex534.asm";為匯編語言源文件取名 .mmregs;定義存儲器映像寄存器stack .usect "STACK",10h;為堆??臻g分配16個存儲單元
.bss x,5;為變量x分配5個存儲單元 .bss y,1;為變量y分配1個存儲單元.defstart;定義標號start.data;定義數據代碼table:
.word 1,2,3,4,5;為標號table開始的5個存儲單元賦值.text;定義文本代碼段start:
STM #0,SWWSR;SWWSR置0,不插等待周期 STM #stack+10h,SP;設置堆棧指針
CALL init;調用子程序init
STM #x,AR1;將變量x的首地址賦給AR1 STM #4,AR2;將操作數#4賦給AR2 LD #0,A;將累加器A清0loop:
ADD *AR1+,A;執(zhí)行加法運算,結果存入累加器A中 BANZ loop,*AR2-;AR2不為0轉移,重復執(zhí)行5次 STL A,@y;將結果(A的低16位)送往變量y存儲單元init:STM #x,AR1;AR1指向x的首地址 RPT #4;重復執(zhí)行下條指令5次 MVPD table,*AR1+;重復傳遞共5個數據
RET;子程序返回.end;源程序結束第6頁/共34頁利用CMPR指令進行比較操作指定的ARx寄存器(x=1~7)與AR0比較,測試條件成立TC置1。例:5-3比較操作后條件分支轉移5.1程序的控制與轉移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頁/共34頁5.2堆棧的使用方法特點:16位堆棧指針SP向堆棧中壓入數據時,堆棧指針從高地址向低地址移動壓入堆棧時,先SP-1,再壓入數據;彈出操作數時,先彈出數據,后SP+1
9設置好堆棧后,就可以使用堆棧了,如:CALLpmad;(SP)-1→SP,(PC)+2→TOS,pmad→PCRET;(TOS)→PC,(SP)+1→SP
第8頁/共34頁5.3加、減法和乘法運算例5-4計算z=x+y-w使用:加法指令ADD,減法指令SUB10LD@x,AADD@y,ASUB@w,ASTLA,@z;取x值,A=x;完成x+y運算,A=x+y;完成x+y-w運算,A=x+y-w;計算結果(A的低16位)存入變量z中第9頁/共34頁5.3加、減法和乘法運算例5-5計算y=mx+b使用:乘法指令MPY,加法指令ADD11LD@m,TMPY@x,AADD@b,ASTLA,@y;取系數m值,T=m;完成mx乘積,A=mx;完成mx+b運算,A=mx+b;計算結果B的低16位存入y中第10頁/共34頁5.3加、減法和乘法運算例5-6計算y=x1*a1+x2*a2使用:乘法指令MPY,乘法累加指令MAC12LD@x1,TMPY@a1,ALD@x2,TMAC@a2,ASTLA,@ySTHA,@y+1;取變量值x1,T=x1;完成乘法x1a1運算,A=x1a1;取變量值x2,T=x2;乘法累加,A=x1a1+x2a2;計算結果的低字AL存入y中;計算結果的高字AH存入y+1中第11頁/共34頁5.3加、減法和乘法運算例5-7計算使用:乘法累加指令MAC,重復執(zhí)行下條指令RPT13第12頁/共34頁14加法/減法指定堆棧空間為變量預留空間初值序列初始化變量設置堆棧指針利用MAC和RPT求乘累加和第13頁/共34頁15
.title"Ex_543.asm“;為匯編語言源文件取名 .mmregs;定義存儲器映像寄存器stack .usect "STACK",10H;為堆??臻g分配16個存儲單元 .bss
a,4;為系數a分配4個存儲單元 .bss x,4;為變量x分配4個存儲單元 .bss y,1;為變量y分配1個存儲單元 .def start;定義標號start .data;定義數據代碼table: .word 1,2,3,4;為標號table開始的 .word 8,6,4,2;8個存儲單元賦值 .text;定義文本代碼段start: STM #0,SWWSR;SWWSR置0,不插等待周期 STM #stack+10H,SP;設置堆棧指針 STM #a,AR1;AR1指向a的首地址 RPT #7;重復執(zhí)行下條指令8次 MVPD table,*AR1+;從程序存儲器向數據存儲器,重復傳遞共8個數據
CALL SUM;調用子程序SUMend: B end;循環(huán)等待SUM: STM #a,AR3;將系數a的首地址賦給AR3 STM #x,AR4;將變量x的首地址賦給AR4 RPTZ A,#3;將累加器清0,重復執(zhí)行下條指令4次 MAC *AR3+,*AR4+,A;執(zhí)行乘法累加運算,結果存入累計器A中 STL A,@y;將結果(A的低16位)送往變量y存儲單元 RET;子程序返回 .end;源程序結束第14頁/共34頁【例5-8】在例5-7的4項乘積aixi(i=1,2,3,4)中找出最大值,并存放累加器A中。
程序:
STM#a,AR1STM#x,AR2STM#2,AR3LD*AR1+,TMPY*AR2+,Aloop1:LD*AR1+,TMPY*AR2+,BMAXABANZloop1,*AR3-;系數a的首地址賦給AR1;變量x的首地址賦給AR2;設置計數器AR3=2;取系數T=a1,并修改AR1;乘法運算A=a1x1,并修改AR2
;取系數T=ai,并修改AR1;乘法運算B=aixi,并修改AR2
;求A和B中的最大值,結果存入A;若AR3≠0,則循環(huán),并修改AR3
若AR3=0,則順序執(zhí)行5.3加、減法和乘法運算第15頁/共34頁175.4重復操作例5-9對一個數組進行初始化X[5]={0,0,0,0,0}第16頁/共34頁【例5-9】對數組進行初始化,使x[5]={0,0,0,0,0}。.bssx,5STM#x,AR1LD#0,ARPT#4STLA,*AR1+
.bssx,5STM#x,AR1
RPTZA,#4STLA,*AR1+注意:
①對x[5]中的5個元素置0,重復次數為4,即執(zhí)行1次STLA,AR1+指令后,再重復執(zhí)行4次;②RPTZ指令設定重復次數后,再對累加器清零。
5.4重復操作第17頁/共34頁19塊重復操作例5-10對數組X[5]中每個元素加1第18頁/共34頁例5-10對數組x[5]中的每一元素加1。
.bssx,5begin:LD#1,BSTM#4,BRCSTM#x,AR4RPTBnext-1ADD*AR4,B,ASTLA,*AR4+next:LD#0,B…;設置數組空間;立即數1送入B;設置重復次數,BRC=4,循環(huán)5次;數組首地址x送入AR4;設置循環(huán)結束地址;數組數據與B相加,結果存入A中;存儲數組結果,并修改地址;B清0塊重復操作第19頁/共34頁215.5數據塊傳送數據傳送指令的特點:①
傳送速度比加載和存儲指令要快;②數據傳送不通過累加器;③
可尋址程序存儲器;④與RPT結合,可實現數據塊傳送。
第20頁/共34頁225.5數據塊傳送第21頁/共34頁例5-11數組X[5]={1,2,3,4,5}初始化(程序存儲器和數據存儲器之間的數據傳送)23
.data
TBL:.word1,2,3,4,5.bssx,5 .textSTART:STM#x,AR5
RPT#4 MVPDTBL,*AR5+ …;定義數據代碼段;為標號TBL開始的5個存儲單元賦初值;為變量x分配5個存儲單元;定義文本代碼段;將變量x的首地址賦給AR5;將下條指令重復執(zhí)行5次;將數據送入X對應地址單元中5.5數據塊傳送第22頁/共34頁例5-12編寫一段程序將數據存儲器中的數組x[20]復制到數組y[20]。(數據存儲器和數據存儲器之間的數據傳送)24
.bssx,20 .bssy,20 .text LD#x,AR2 LD#y,AR3 RPT#19 MVDD*AR2+,*AR3+…..;為變量x分配20個存儲單元;為變量y分配20個存儲單元;定義文本代碼段;將變量x的首地址賦給AR2;將變量y的首地址賦給AR3;將下條指令重復執(zhí)行20次;將((AR2))((AR3))5.5數據塊傳送第23頁/共34頁用雙操作數指令編程的特點:①單周期內通過C總線和D總線尋址兩個數據②用間接尋址方式獲得操作數,且只能用AR2~AR5③占用的程序空間?、苓\行的速度快255.6雙操作數乘法指令功能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型雙操作數指令尋址方式:*ARn、*ARn+、*ARn-、*ARn+0%第24頁/共34頁編制求解的程序段。265.6雙操作數乘法
單操作數指令方案雙操作數指令方案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é)省的總機器周期數=1T*N(迭代次數)=NT。第25頁/共34頁進一步優(yōu)化的程序段。利用雙操作數指令進行乘法累加運算,完成N項乘積求和需2N個機器周期。如果將乘法累加器單元、多總線以及硬件循環(huán)操作結合在一起,可以形成一個優(yōu)化的乘法累加程序。完成一個N項乘積求和的操作,只需要N+2個機器周期。程序如下:275.6雙操作數乘法
STM#x,AR2STM#a,AR3RPTZA,#19;2個機器周期MAC*AR2+,*AR3+,A;1個機器周期STHA,@ySTLA,@y+1第26頁/共34頁28作業(yè)1、編寫的程序,并注釋2、編寫對數組X[8]={1,2,3,4,5,6,7,8}的初始化程序,并注釋第27頁/共34頁長字運算C54x可以利用長操作數(32位)進行長字運算。295.7長字運算和并行運算
長字指令
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頁/共34頁長操作數在存儲器的排列方法
偶地址排列法
?指令中給出的地址為偶地址?存儲器中低地址存放高16位?存儲器中高地址存放底16位奇地址排列法
?指令中給出的地址為奇地址?存儲器中低地址存放低16位?存儲器中高地址存放高16位305.7長字運算和并行運算第29頁/共34頁315.7長字運算和并行運算
偶地址排列法舉例?DLD*AR3+,A
執(zhí)行前:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年小學信息技術工作計劃范例(二篇)
- 2024年衛(wèi)生院車輛管理制度(二篇)
- 2024年小區(qū)地上車位買賣合同范本(二篇)
- 2024年安全工作例會管理制度(四篇)
- 2024年幼兒園中班家長工作計劃(三篇)
- 2024年小班教師工作計劃范文(二篇)
- 2024年工會個人工作總結范文(二篇)
- 2024年幼兒園區(qū)域活動計劃范例(三篇)
- 2024年小學教師管理制度范本(四篇)
- 2024年委托加工協議參考模板(二篇)
- 地下管線探測技術方案
- 小數除法單元測試題
- 社會保險稽核通知書
- 銅電解設備監(jiān)理工作作業(yè)指導(新)
- 玻璃鋼夾砂管施工方案doc
- 股權代持協議書(標準版)
- 智慧樹知到《食品保藏探秘》2019章節(jié)測試答案
- 二次結構圈梁、構造柱混凝土工程施工方案
- 急性胃腸炎病歷模板4頁
- 旋風式除塵器使用說明書
- 1421平方差公式教案
評論
0/150
提交評論