版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章匯編語言程序設(shè)計(jì)舉例:5.1數(shù)據(jù)塊傳送例1:將數(shù)組X[5]={1,2,3,4,5}初始化
.dataTAL:.word1,2,3,4,5.sect“.vectors”BSTART.bssx,5.textSTART:STM#x,AR5RPT#4MVPDTAB,*AR5+第5章匯編語言程序設(shè)計(jì)舉例:例2:編寫一段程序?qū)?shù)據(jù)存儲(chǔ)器中的數(shù)組X[20]復(fù)制到數(shù)組Y[20]中。
.bssx,20.bssy,20…STM#x,AR2STM#y,AR3RPT#19MVDDAR2+,AR3+例2:編寫一段程序?qū)?shù)據(jù)存儲(chǔ)器中的數(shù)組X[20]復(fù)制到5.2加減法和乘法運(yùn)算例3:編寫完成Z=X+Y-W的功能LD@x,A;直接尋址ADD@y,ASUB@w,A;A=A-@wSTLA,@z例4:編程實(shí)現(xiàn)y=mx+b的功能
LD@m,TMPY@x,AADD@b,ASTLA,@y5.2加減法和乘法運(yùn)算例5:編寫實(shí)現(xiàn)y=x1?a1+x2?a2的功能LD@x1,TMPY@a1,BLD@x2,TMAC@a2,BSTLB,@ySTHB,@y+1例5:編寫實(shí)現(xiàn)y=x1?a1+x2?a2的功能例6:找出y=ai?xi(i=1,2,3,4)中乘機(jī)項(xiàng)ai?xi的最大值,并存入累加器A中。
STM#a,AR1STM#x,AR2STM#2,AR3LD*AR1+,TMPY*AR2+,ALoop1:LD*AR1+,TMPY*AR2+,BMAXABANZloop1,*AR3-例6:找出y=ai?xi(i=1,2,3,4)中乘機(jī)項(xiàng)ai5.3重復(fù)操作例7:對一個(gè)數(shù)組初始化:X[5]={0,0,0,0,0}
.bssx,5STM#x,AR1LD#0,ARPT#4STLA,*AR1+或采用如下方法:
.bssx,5STM#x,AR1RPTZA,#4STLA,*AR1+注意:執(zhí)行重復(fù)操作時(shí)不響應(yīng)任何中斷5.3重復(fù)操作例8:對數(shù)組X[5]中的每個(gè)元素加1.bssx,5Begin:LD#1,16,BSTM#4,BRCSTM#X,AR4RPTBnext-1ADD*AR4,16,B,ASTHA,*AR4+Next:LD#0,B……例8:對數(shù)組X[5]中的每個(gè)元素加15.4程序的控制與轉(zhuǎn)移例9:RCTCCCsub,BNEQBCnew,AGT,AOV例10:計(jì)算 y=xi(i=1~5)
.bssx,5.bssy,1STM#x,AR1STM#4,AR2LD#0,ALoop:ADD*AR1+,ABANZloop,*AR2-STLA,@y5.4程序的控制與轉(zhuǎn)移例11:STM#5,AR1STM#10,AR0Loop:……*AR1+……CMPRLT,AR1;若(AR1)<(AR0),則TC=1BCloop,TC;若TC=1,則轉(zhuǎn)LOOP例11:STM#5,AR15.5堆棧的使用方法在數(shù)據(jù)RAM空間開辟一個(gè)堆棧區(qū),設(shè)置如下:Size.set100Stack.usect”STK”,sizeSTM#stack+size,SP……5.5堆棧的使用方法例12:編寫實(shí)現(xiàn)方程y=mx+b的程序
單操作數(shù)法:
LD@m,TMPY@x,AADD@b,ASTLA,@y
雙操作數(shù)法:
MPY*AR2,*AR3,AADD@b,ASTLA,@y5.6雙操作數(shù)乘法例12:編寫實(shí)現(xiàn)方程y=mx+b的程序單操作數(shù)法:例13:編寫完成y=aixi(i=1~20)采用單操作數(shù)方法:
LD#0,BSTM,#a,AR2STM#x,AR3STM#19,BRCRPTBdone-1……LD*AR2+,T3TMPY*AR3+,A……ADDA,BDone:STHB,@ySTLB,@y+1采用雙操作數(shù)的方法:
LD#0,BSTM,#a,AR2STM#x,AR3STM#19,BRCRPTBdone-12TMPY*AR2+,AR3+,A……ADDA,BDone:STHB,@ySTLB,@y+1例13:編寫完成y=aixi(i=1~20)采用單操作數(shù)例14:進(jìn)一步優(yōu)化例13的程序:STM#x,AR2STM#a,AR3RPTZA,#19MAC*AR2+,*AR3+,ASTHA,@ySTLA,@y+1例14:進(jìn)一步優(yōu)化例13的程序:例15計(jì)算 Z32=X32+Y32
標(biāo)準(zhǔn)運(yùn)算LD@xhi,16,AADDS@xho,AADD@yhi,16,AADDS@yho,ASTHA,@zhiSTLA,@zho(6個(gè)字,6個(gè)T)長字運(yùn)算DLD@xhi,ADADD@yhi,ADSTA,@zhi(3個(gè)字,3個(gè)T)除DST指令(存儲(chǔ)32位數(shù)要用E總線2次,需2個(gè)機(jī)器周期)外,都是單周期指令,也是在單個(gè)周期內(nèi)同時(shí)利用C總線和D總線,得到32位操作數(shù)。5.7長字運(yùn)算和并行運(yùn)算例15計(jì)算 Z32=X32+Y32標(biāo)準(zhǔn)運(yùn)算長字運(yùn)算除D并行運(yùn)算指令有4種:并行加載和乘法指令,并行加載和存儲(chǔ)指令,并行存儲(chǔ)和乘法指令,并行存儲(chǔ)和加/減法指令。例16:編寫計(jì)算z=x+y和f=e+d的程序段
.bssx,3.bssd,3STM#x,AR5STM#d,AR2LD#0,ASMADD*AR5+,16,AST*AR5+,16,A||LD*AR2+,BADD*AR2+,16,BSTHB,*AR2xyzedfAR5AR2并行運(yùn)算指令有4種:并行加載和乘法指令,并行加載和存例16:例17編寫計(jì)算Z64=W64+X64-Y64
的程序段W、X、Y和結(jié)果Z都是64位,它們都由兩個(gè)32位的長字組成。利用長字指令完成64位數(shù)的加/減法
W3w2w1w0(W64
)+
x3x2Cx1x0(X64
)-
y3y2C’y1y0(Y64
)
z3z2z1z0(Z64
)低32位相加產(chǎn)生進(jìn)位C低32位相減產(chǎn)生借位C’例17編寫計(jì)算Z64=W64+X64-Y64的程序段
程序段:
DLD@w1,A;A=w1w2DADD@x1,A;A=w1w0+x1x0,產(chǎn)生進(jìn)位CDLD@w3,B;B=w3w2
ADDC@x2,B;B=w3w2+x2+CADD@x3,16,B;B=w3w2+x3x2+CDSUB@y1,A;A=w1w0+x1x0-y1y0,產(chǎn)生借位C’DSTA,@z1;z1z0=w1w0+x1x0-y1y0
SUBB@y2,B;B=w3w2+x3x2+C-y2-C’SUB@y3,16,B;B=w3w2+x3x2+C-y3y2-C’DSTB,@z3;z3z2=w3w2+x3x2+C-y3y2-C’程序段:32位乘法運(yùn)算乘法算式如下:
x1x0SU×y1y0SUx0×y0U×Uy1×x0S×Ux1×y0S×UY1×x1S×Sw3w2w1w0SUUU其中,S---帶符號(hào)數(shù),U---無符號(hào)數(shù)32位乘法運(yùn)算例18:編寫計(jì)算W64=X32*Y32
的程序段STM#x0,AR2STM#y0,AR3LD*AR2,T;T=x0MPYUAR3+,A;A=uy0*ux0STLA@w0;w0=ux0*uy0LDA,-16,A;A=A>>16MACSU*AR2+,*AR3-,A;A+=y1*ux0MACSU*AR3+,*AR2,A;A+=x1*uy0STLA,@w1;w1=ALDA,-16,A;A=A>>16MAC*AR2,*AR3,A;A+=x1*y1STLA,@w2;w2=A的低16位STLA,@w3;w3=A的高16位例18:編寫計(jì)算W64=X32*Y32的程序段5.8小數(shù)運(yùn)算1.小數(shù)的表示方法
C54X采用2的補(bǔ)碼小數(shù),其最高位為符號(hào)位數(shù)值范圍從-1~1,一個(gè)16位2的補(bǔ)碼小數(shù)的每一位權(quán)值為:一個(gè)十進(jìn)制小數(shù)乘以32768之后,將十進(jìn)制整數(shù)部分轉(zhuǎn)換成十六進(jìn)制數(shù),就得到了這個(gè)十進(jìn)制小數(shù)的2的補(bǔ)碼表示了。
注意:匯編語言程序中,不能直接寫入十進(jìn)制小數(shù)。要定義一個(gè)系數(shù)0.707,可以寫成:word32768×707/1000不能寫成32768×0.707.-11/21/41/8…2-15
5.8小數(shù)運(yùn)算1.小數(shù)的表示方法-11/22.小數(shù)乘法與冗余符號(hào)位出現(xiàn)冗余符號(hào)位是兩個(gè)帶符號(hào)數(shù)相乘,得到的乘積帶2個(gè)符號(hào)位,造成錯(cuò)誤的結(jié)果。解決冗余符號(hào)位的方法:在程序中設(shè)定狀態(tài)寄存器ST1中的FRAT(小數(shù)方式)位為1,在乘法器將結(jié)果送至累加器時(shí)就能自動(dòng)的左移一位,自動(dòng)地消去了兩個(gè)帶符號(hào)數(shù)相乘時(shí)產(chǎn)生的冗余符號(hào)位。注意:小數(shù)乘法編程時(shí),應(yīng)事先設(shè)置FRCT位:
SSBXFRCT…MPYAR2,*AR3,ASTHA,@Z2.小數(shù)乘法與冗余符號(hào)位例19編寫計(jì)算y=∑ai*xi(i=1~4)的程序其中數(shù)據(jù)均為小數(shù):
a1=0.1a2=0.2a3=-0.3a4=0.4x1=0.8x2=0.6a3=-0.4x4=-0.2.bssx,4.bssa,4.bssy,1.dataTable:.word1*32768/10.word2*32768/10.word-3*32768/10.word4*32768/10.word8*32768/10.word6*32768/10.word-4*32768/10.word-2*32768/10.text例19編寫計(jì)算y=∑ai*xi(i=1~4)的Start:SSBXFRCTSTM#x,AR1RPT#7MVPDtable,*AR1STM#x,AR2STM#a,AR3RPTZA,#3MACAR2+,AR3,ASTHA,@yDone:BdoneStart:SSBXFRCT5.9除法運(yùn)算C54X中沒有單周期的16位除法指令,利用一條條減法指令(SUBC),加上重復(fù)指令RPT#15就可實(shí)現(xiàn)兩個(gè)無符號(hào)的除法運(yùn)算。
SUBCSmem,src;(src)-(Smem)<<15→ALU輸出端;如果ALU輸出端≥0,則(ALU輸出端)<<1+1→src
;否則(src)<<1→src除法運(yùn)算有兩種情況:5.9除法運(yùn)算C54X中沒有單周期的16位除法指令,1.|被除數(shù)|<|除數(shù)|,商為小數(shù)例20:編寫0.4÷(-0.8)的程序段
.bssnum,1.bssden,1.bssquot,1.dataTable:.word4*32768/10;0.4.word-8*32768/10;-0.8.textStart:STM#num,AR1RPT#1MVPDtable,*AR1;傳送2個(gè)數(shù)據(jù)至分子、分母單元
LD@den,16,A;將分母移到累加器A(31~16)
MPYA@num;(num)*(A(32~16))→B,獲取商的符號(hào)(在累加器B中)
ABSA;分母取絕對值1.|被除數(shù)|<|除數(shù)|,商為小數(shù)STHA,@den;分母絕對值存放原處LD@num,16,A;分子→A(32~16)ABSA;分子取絕對值RPT#14;15次減法循環(huán),完成除法SUBC@den,A;如果B<0(商是負(fù)數(shù)),則需要變號(hào)XC1,BLTNEGASTLA,@quot;保存商注意:SUBC指令僅對無符號(hào)數(shù)進(jìn)行操作,因此事先必須對除數(shù)和被除數(shù)取絕對值。利用乘法操作,獲得商的符號(hào),最后通過條件執(zhí)行指令給商加上適當(dāng)?shù)姆?hào)。2.|被除數(shù)|〉|除數(shù)|,商為整數(shù)與例20,除輸入數(shù)據(jù)外,僅有下列改動(dòng)LD@num,16,A改成LD@num,ARPT#14改成RPT#15STHA,@den5.10浮點(diǎn)運(yùn)算
為了擴(kuò)大數(shù)據(jù)的范圍和精度,往往需要采用浮點(diǎn)運(yùn)算。C54X雖然是個(gè)定點(diǎn)DSP器件,但它支持浮點(diǎn)運(yùn)算。1.浮點(diǎn)數(shù)的表示方法浮點(diǎn)數(shù)用尾數(shù)和指數(shù)組成,定點(diǎn)數(shù)=尾數(shù)×2-指數(shù)
浮點(diǎn)數(shù)的尾數(shù)和指數(shù)可正可負(fù),均用補(bǔ)碼表示。指數(shù)范圍-8~31。2.定點(diǎn)數(shù)→浮點(diǎn)數(shù)通過3條指令實(shí)現(xiàn)(假設(shè)定點(diǎn)數(shù)已在累加器A中)
1)EXPA
例22EXPA
執(zhí)行前執(zhí)行后
A=FFFFFFFFCBA=FFFFFFFFCBT=0000T=0019(25)5.10浮點(diǎn)運(yùn)算為了擴(kuò)大數(shù)據(jù)的范圍和精度,往往例23EXPB
執(zhí)行前執(zhí)行后
A=0785432105A=FF85430000T=0007T=FFFC(-4)2)STT,EXPONENT
這條緊接在XEP后的指令是將保存在T寄存器中的指數(shù)存放到數(shù)據(jù)寄存器的指數(shù)單元。3)NORMA
例24:NORMA
執(zhí)行前執(zhí)行后
A=FFFFFFF001A=FF80080000T=0013T=0013(19)例23EXPB例25:NORMB,A
執(zhí)行前執(zhí)行后
A=FFFFFFF001A=FF42141414B=210A0A0A0AB=FF42141414T=FFF9T=FFF9(-7)
注意:NORM指令不能緊跟在EXP指令的后面。
3.浮點(diǎn)數(shù)→定點(diǎn)數(shù)將浮點(diǎn)數(shù)轉(zhuǎn)化為定點(diǎn)數(shù)時(shí),只要按指數(shù)值將其右移(指數(shù)為負(fù)數(shù)時(shí)左移)就行了。4.浮點(diǎn)數(shù)乘法舉例見書P229頁例26例25:NORMB,A【例5.26】編寫浮點(diǎn)乘法程序,完成x1×x2=0.3×(–0.8)運(yùn)算程序中保留10個(gè)數(shù)據(jù)存儲(chǔ)單元:【例5.26】編寫浮點(diǎn)乘法程序,完成x1×x2=0.3×(–數(shù)字信號(hào)處理技術(shù)第五章匯編語言程序設(shè)計(jì)課件數(shù)字信號(hào)處理技術(shù)第五章匯編語言程序設(shè)計(jì)課件數(shù)字信號(hào)處理技術(shù)第五章匯編語言程序設(shè)計(jì)課件數(shù)字信號(hào)處理技術(shù)第五章匯編語言程序設(shè)計(jì)課件第5章匯編語言程序設(shè)計(jì)舉例:5.1數(shù)據(jù)塊傳送例1:將數(shù)組X[5]={1,2,3,4,5}初始化
.dataTAL:.word1,2,3,4,5.sect“.vectors”BSTART.bssx,5.textSTART:STM#x,AR5RPT#4MVPDTAB,*AR5+第5章匯編語言程序設(shè)計(jì)舉例:例2:編寫一段程序?qū)?shù)據(jù)存儲(chǔ)器中的數(shù)組X[20]復(fù)制到數(shù)組Y[20]中。
.bssx,20.bssy,20…STM#x,AR2STM#y,AR3RPT#19MVDDAR2+,AR3+例2:編寫一段程序?qū)?shù)據(jù)存儲(chǔ)器中的數(shù)組X[20]復(fù)制到5.2加減法和乘法運(yùn)算例3:編寫完成Z=X+Y-W的功能LD@x,A;直接尋址ADD@y,ASUB@w,A;A=A-@wSTLA,@z例4:編程實(shí)現(xiàn)y=mx+b的功能
LD@m,TMPY@x,AADD@b,ASTLA,@y5.2加減法和乘法運(yùn)算例5:編寫實(shí)現(xiàn)y=x1?a1+x2?a2的功能LD@x1,TMPY@a1,BLD@x2,TMAC@a2,BSTLB,@ySTHB,@y+1例5:編寫實(shí)現(xiàn)y=x1?a1+x2?a2的功能例6:找出y=ai?xi(i=1,2,3,4)中乘機(jī)項(xiàng)ai?xi的最大值,并存入累加器A中。
STM#a,AR1STM#x,AR2STM#2,AR3LD*AR1+,TMPY*AR2+,ALoop1:LD*AR1+,TMPY*AR2+,BMAXABANZloop1,*AR3-例6:找出y=ai?xi(i=1,2,3,4)中乘機(jī)項(xiàng)ai5.3重復(fù)操作例7:對一個(gè)數(shù)組初始化:X[5]={0,0,0,0,0}
.bssx,5STM#x,AR1LD#0,ARPT#4STLA,*AR1+或采用如下方法:
.bssx,5STM#x,AR1RPTZA,#4STLA,*AR1+注意:執(zhí)行重復(fù)操作時(shí)不響應(yīng)任何中斷5.3重復(fù)操作例8:對數(shù)組X[5]中的每個(gè)元素加1.bssx,5Begin:LD#1,16,BSTM#4,BRCSTM#X,AR4RPTBnext-1ADD*AR4,16,B,ASTHA,*AR4+Next:LD#0,B……例8:對數(shù)組X[5]中的每個(gè)元素加15.4程序的控制與轉(zhuǎn)移例9:RCTCCCsub,BNEQBCnew,AGT,AOV例10:計(jì)算 y=xi(i=1~5)
.bssx,5.bssy,1STM#x,AR1STM#4,AR2LD#0,ALoop:ADD*AR1+,ABANZloop,*AR2-STLA,@y5.4程序的控制與轉(zhuǎn)移例11:STM#5,AR1STM#10,AR0Loop:……*AR1+……CMPRLT,AR1;若(AR1)<(AR0),則TC=1BCloop,TC;若TC=1,則轉(zhuǎn)LOOP例11:STM#5,AR15.5堆棧的使用方法在數(shù)據(jù)RAM空間開辟一個(gè)堆棧區(qū),設(shè)置如下:Size.set100Stack.usect”STK”,sizeSTM#stack+size,SP……5.5堆棧的使用方法例12:編寫實(shí)現(xiàn)方程y=mx+b的程序
單操作數(shù)法:
LD@m,TMPY@x,AADD@b,ASTLA,@y
雙操作數(shù)法:
MPY*AR2,*AR3,AADD@b,ASTLA,@y5.6雙操作數(shù)乘法例12:編寫實(shí)現(xiàn)方程y=mx+b的程序單操作數(shù)法:例13:編寫完成y=aixi(i=1~20)采用單操作數(shù)方法:
LD#0,BSTM,#a,AR2STM#x,AR3STM#19,BRCRPTBdone-1……LD*AR2+,T3TMPY*AR3+,A……ADDA,BDone:STHB,@ySTLB,@y+1采用雙操作數(shù)的方法:
LD#0,BSTM,#a,AR2STM#x,AR3STM#19,BRCRPTBdone-12TMPY*AR2+,AR3+,A……ADDA,BDone:STHB,@ySTLB,@y+1例13:編寫完成y=aixi(i=1~20)采用單操作數(shù)例14:進(jìn)一步優(yōu)化例13的程序:STM#x,AR2STM#a,AR3RPTZA,#19MAC*AR2+,*AR3+,ASTHA,@ySTLA,@y+1例14:進(jìn)一步優(yōu)化例13的程序:例15計(jì)算 Z32=X32+Y32
標(biāo)準(zhǔn)運(yùn)算LD@xhi,16,AADDS@xho,AADD@yhi,16,AADDS@yho,ASTHA,@zhiSTLA,@zho(6個(gè)字,6個(gè)T)長字運(yùn)算DLD@xhi,ADADD@yhi,ADSTA,@zhi(3個(gè)字,3個(gè)T)除DST指令(存儲(chǔ)32位數(shù)要用E總線2次,需2個(gè)機(jī)器周期)外,都是單周期指令,也是在單個(gè)周期內(nèi)同時(shí)利用C總線和D總線,得到32位操作數(shù)。5.7長字運(yùn)算和并行運(yùn)算例15計(jì)算 Z32=X32+Y32標(biāo)準(zhǔn)運(yùn)算長字運(yùn)算除D并行運(yùn)算指令有4種:并行加載和乘法指令,并行加載和存儲(chǔ)指令,并行存儲(chǔ)和乘法指令,并行存儲(chǔ)和加/減法指令。例16:編寫計(jì)算z=x+y和f=e+d的程序段
.bssx,3.bssd,3STM#x,AR5STM#d,AR2LD#0,ASMADD*AR5+,16,AST*AR5+,16,A||LD*AR2+,BADD*AR2+,16,BSTHB,*AR2xyzedfAR5AR2并行運(yùn)算指令有4種:并行加載和乘法指令,并行加載和存例16:例17編寫計(jì)算Z64=W64+X64-Y64
的程序段W、X、Y和結(jié)果Z都是64位,它們都由兩個(gè)32位的長字組成。利用長字指令完成64位數(shù)的加/減法
W3w2w1w0(W64
)+
x3x2Cx1x0(X64
)-
y3y2C’y1y0(Y64
)
z3z2z1z0(Z64
)低32位相加產(chǎn)生進(jìn)位C低32位相減產(chǎn)生借位C’例17編寫計(jì)算Z64=W64+X64-Y64的程序段
程序段:
DLD@w1,A;A=w1w2DADD@x1,A;A=w1w0+x1x0,產(chǎn)生進(jìn)位CDLD@w3,B;B=w3w2
ADDC@x2,B;B=w3w2+x2+CADD@x3,16,B;B=w3w2+x3x2+CDSUB@y1,A;A=w1w0+x1x0-y1y0,產(chǎn)生借位C’DSTA,@z1;z1z0=w1w0+x1x0-y1y0
SUBB@y2,B;B=w3w2+x3x2+C-y2-C’SUB@y3,16,B;B=w3w2+x3x2+C-y3y2-C’DSTB,@z3;z3z2=w3w2+x3x2+C-y3y2-C’程序段:32位乘法運(yùn)算乘法算式如下:
x1x0SU×y1y0SUx0×y0U×Uy1×x0S×Ux1×y0S×UY1×x1S×Sw3w2w1w0SUUU其中,S---帶符號(hào)數(shù),U---無符號(hào)數(shù)32位乘法運(yùn)算例18:編寫計(jì)算W64=X32*Y32
的程序段STM#x0,AR2STM#y0,AR3LD*AR2,T;T=x0MPYUAR3+,A;A=uy0*ux0STLA@w0;w0=ux0*uy0LDA,-16,A;A=A>>16MACSU*AR2+,*AR3-,A;A+=y1*ux0MACSU*AR3+,*AR2,A;A+=x1*uy0STLA,@w1;w1=ALDA,-16,A;A=A>>16MAC*AR2,*AR3,A;A+=x1*y1STLA,@w2;w2=A的低16位STLA,@w3;w3=A的高16位例18:編寫計(jì)算W64=X32*Y32的程序段5.8小數(shù)運(yùn)算1.小數(shù)的表示方法
C54X采用2的補(bǔ)碼小數(shù),其最高位為符號(hào)位數(shù)值范圍從-1~1,一個(gè)16位2的補(bǔ)碼小數(shù)的每一位權(quán)值為:一個(gè)十進(jìn)制小數(shù)乘以32768之后,將十進(jìn)制整數(shù)部分轉(zhuǎn)換成十六進(jìn)制數(shù),就得到了這個(gè)十進(jìn)制小數(shù)的2的補(bǔ)碼表示了。
注意:匯編語言程序中,不能直接寫入十進(jìn)制小數(shù)。要定義一個(gè)系數(shù)0.707,可以寫成:word32768×707/1000不能寫成32768×0.707.-11/21/41/8…2-15
5.8小數(shù)運(yùn)算1.小數(shù)的表示方法-11/22.小數(shù)乘法與冗余符號(hào)位出現(xiàn)冗余符號(hào)位是兩個(gè)帶符號(hào)數(shù)相乘,得到的乘積帶2個(gè)符號(hào)位,造成錯(cuò)誤的結(jié)果。解決冗余符號(hào)位的方法:在程序中設(shè)定狀態(tài)寄存器ST1中的FRAT(小數(shù)方式)位為1,在乘法器將結(jié)果送至累加器時(shí)就能自動(dòng)的左移一位,自動(dòng)地消去了兩個(gè)帶符號(hào)數(shù)相乘時(shí)產(chǎn)生的冗余符號(hào)位。注意:小數(shù)乘法編程時(shí),應(yīng)事先設(shè)置FRCT位:
SSBXFRCT…MPYAR2,*AR3,ASTHA,@Z2.小數(shù)乘法與冗余符號(hào)位例19編寫計(jì)算y=∑ai*xi(i=1~4)的程序其中數(shù)據(jù)均為小數(shù):
a1=0.1a2=0.2a3=-0.3a4=0.4x1=0.8x2=0.6a3=-0.4x4=-0.2.bssx,4.bssa,4.bssy,1.dataTable:.word1*32768/10.word2*32768/10.word-3*32768/10.word4*32768/10.word8*32768/10.word6*32768/10.word-4*32768/10.word-2*32768/10.text例19編寫計(jì)算y=∑ai*xi(i=1~4)的Start:SSBXFRCTSTM#x,AR1RPT#7MVPDtable,*AR1STM#x,AR2STM#a,AR3RPTZA,#3MACAR2+,AR3,ASTHA,@yDone:BdoneStart:SSBXFRCT5.9除法運(yùn)算C54X中沒有單周期的16位除法指令,利用一條條減法指令(SUBC),加上重復(fù)指令RPT#15就可實(shí)現(xiàn)兩個(gè)無符號(hào)的除法運(yùn)算。
SUBCSmem,src;(src)-(Smem)<<15→ALU輸出端;如果ALU輸出端≥0,則(ALU輸出端)<<1+1→src
;否則(src)<<1→src除法運(yùn)算有兩種情況:5.9除法運(yùn)算C54X中沒有單周期的16位除法指令,1.|被除數(shù)|<|除數(shù)|,商為小數(shù)例20:編寫0.4÷(-0.8)的程序段
.bssnum,1.bssden,1.bssquot,1.dataTable:.word4*32768/10;0.4.word-8*32768/10;-0.8.textStart:STM#num,AR1RPT#1MVPDtable,*AR1;傳送2個(gè)數(shù)據(jù)至分子、分母單元
LD@den,16,A;將分母移到累加器A(31~16)
MPYA@num;(num)*(A(32~16))→B,獲取商的符號(hào)(在累加器B中)
ABSA;分母取絕對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 線上辦公信息安全協(xié)議
- 旅館承包合同范例
- 房地產(chǎn)經(jīng)紀(jì)公司代理合同模板
- 技術(shù)成果轉(zhuǎn)讓股權(quán)協(xié)議
- 2024年汽車租賃合同范本
- 抵押物借款合同的社會(huì)責(zé)任
- 教職工違紀(jì)聘用合同案例
- 包裝設(shè)計(jì)認(rèn)可合同書范本
- 有限合伙企業(yè)協(xié)議書常見問題解答
- 2024常年質(zhì)量管理顧問任命書
- 糧油流通統(tǒng)計(jì)新任統(tǒng)計(jì)人員業(yè)務(wù)培訓(xùn)課件
- 汽車起重機(jī)日常檢查維修保養(yǎng)記錄表
- 中國醫(yī)科大學(xué)2023年12月《康復(fù)工程學(xué)》作業(yè)考核試題-【答案】
- 浙江省9+1高中聯(lián)盟2022-2023學(xué)年高一上學(xué)期11月期中考物理試題(解析版)
- 七年級上冊英語期中專項(xiàng)復(fù)習(xí)-補(bǔ)全對話(含答案)
- 鐵的單質(zhì)(導(dǎo)學(xué)案)高一化學(xué)
- 絞吸式挖泥船水下疏挖河渠施工工法
- 反腐倡廉廉潔行醫(yī)
- 心血管內(nèi)科醫(yī)療質(zhì)量評價(jià)體系與考核標(biāo)準(zhǔn)
- 2022-2023學(xué)年廣州市南沙區(qū)小升初全真模擬數(shù)學(xué)檢測卷含答案
- 2023年食品安全糧食類理論知識(shí)考試題庫(含答案)
評論
0/150
提交評論