版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AssemblyProgrammingCopyright©2009TexasInstruments.Allrightsreserved.
TechnicalTrainingOrganizationT
TOAppendixCTMS320C28x™MCUWorkshopLearningObjectivesPerformsimpleprogramcontrolusingbranchandconditionalcodesWriteC28xcodetoperformbasicarithmeticUsethemultipliertoimplementsum-of-productsequationsUsetheRPTinstruction(repeat)tooptimizeloopsUseMACforlongsum-of-productsEfficientlytransferthecontentsofoneareaofmemorytoanotherExamineread-modify-writeoperationsProgramControlALU/MultiplyOperationsDataMoveLogicalOperationsSpecialInstructionsBranchTypesandRangeBranchoffset+/-32K2-word
instructionLongBranchabsolute4M2-word
instructionPCShortBranch
offset+127/-128
1-wordinstructionProgramMemory0x0000000x3FFFFF3BranchTypesProgramControl-BranchesFunctionShortBranch
SB 8bit,cond 7/4 1FastShortBranch
SBF 8bit,EQ|NEQ|TC|NTC 4/4 1FastRelativeBranch
B 16bit,cond 7/4 2FastBranch
BF 16bit,cond 4/4 2AbsoluteBranch
LB 22bit 4 2DynamicBranch
LB *XAR7 4 1BranchonAR
BANZ 16bit,ARn-- 4/2 2Branchoncompare BAR 16bit,ARn,ARn,EQ|NEQ 4/2 2TheassemblerwilloptimizeBtoSBifpossibleNEQEQGTGEQLTLEQHIHIS(C)LO(NC)LOSNOVOVNTCTCUNCNBIOConditionCodeInstructionCyclesT/FSizeConditionflagsaresetontheprioruseoftheALUProgramControl-Call/ReturnFunctionCallCodeCall LCR 22bit 4 LRETR 4DynamicCall LCR *XARn 4 LRETR 4InterruptReturn
IRET 8CyclesReturncodeCyclesMoreCallvariationsintheuserguideareforcodebackwardcompatibilityStackLocal
VarRPCOldRPCPCFuncLCRFuncLRETRRPC22-bitoldRetAddrRetAddrNewRPCBANZLoopControlExamplelen.set5x .usect“samp”,6y .set(x+len) .sect“code” MOVLXAR2,#x MOVAR3,#len-2 MOVAL,*XAR2++sum: ADDAL,*XAR2++ BANZ sum,AR3-- MOV*(0:y),ALAR3COUNTDatax0x1x2x3x4xyXAR2AuxiliaryregisterusedasloopcounterBranchifAuxiliaryRegisternotzeroTestperformedonlower16-bitsofXARxonlyProgramControlALU/MultiplyOperationsDataMoveLogicalOperationsSpecialInstructionsALUandAccumulatorALUandBarrelShifterACCAH(31-16)AL(15-0)AH.MSBAH.LSBAL.MSBAL.LSB16/32datamem,16/32bitregistersProduct(32)MUXST0,ST18/16ImmAccumulator-BasicMathInstructionsMOV Ax,loc16ADD Ax,loc16SUB Ax,loc16AND Ax,loc16OR Ax,loc16XOR Ax,loc16AND Ax,loc16,#16bNOT AxNEG AxMOV loc16,AxAx=AHorALOperationsxxxAx,#16b;wordxxxBAx,#8b;bytexxxL ACC,#32b;longxxx=instruction:MOV,ADD,SUB,...
Ax=AH,orAL
Assemblerwillautomaticallyconvertto1wordinstruction.TwowordinstructionswithshiftoptionOnewordinstruction,noshiftADDACC,#01234h<<4ADDBAL,#34hACCOperationsMOV ACC,loc16<<shiftADD SUB }frommemory(leftshiftoptional)MOV ACC,#16b<<shiftADDSUB }16-bitconstant(leftshiftoptional)MOV loc16,ACC<<shift;ALMOVH loc16,ACC<<shift;AHFormatExVariationShifttheAccumulatorShiftfullACCLSL ACC<<shiftSFR ACC>>shiftLSL ACC<<TSFR ACC>>TACC31………0SFRACC31………0LSL0CCSXMShiftALorAHLSL AX<<TLSR AX<<TASR AX>>TLSL AX<<shift
LSR AX<<shiftASR AX>>shiftAx15………0ASRAx15………0LSL0CCSXMAx15………0LSRC0(1-16)(0-15)32BitShiftOperations[ACC]ACC31………00CExamples:LSLL ACC,TLSRL ACC,T
ASRL ACC,TACC31………0C0or1ACC31………0C0Note:T(4:0)areused;otherbitsareignoredbasedonSXMLogicalShiftLeft–Long:LSLLLogicalShiftRight–Long:LSRLArithmeticShiftRight–Long:ASRLMultiplyUnitPRegister(32)ACC(32)Shift(PM)32x32MultiplyUnit16x16DataMem
orRegister
ProgMem(16)orImmed(8,16)XTRegister
MUXTRegisterMultiplierInstructions
Instruction Execution Purpose MOV T,loc16 T=loc16 GetfirstoperandMPY ACC,T,loc16 ACC=T*loc16 ForsingleorfirstproductMPY P,T,loc16 P=T*loc16 FornthproductMPYB ACC,T,#8bu ACC=T*8bu Using8-bitunsignedconstMPYB P,T,#8bu P=T*8bu Using8-bitunsignedconstMOV ACC,P ACC=P Move1stproduct<<PMtoACCADD ACC,P ACC+=P Addnthproduct<<PMtoACCSUB ACC,P ACC-=P Subnthproduct<<PMfr.ACCInstructionMPYA P,T,#16b ACC+=P<<PM then P=T*#16bMPYA P,T,loc16 ACC+=P<<PM then P=T*loc16MPYS P,T,loc16 ACC-=P<<PM then P=T*loc16ExecutionMOVP T,loc16 ACC=P<<PM T=loc16MOVA T,loc16 ACC+=P<<PM T=loc16
MOVS T,loc16 ACC-=P<<PM T=loc16Sum-of-ProductsZAPA ;ACC=P=OVC=0MOV T,@X1;T=X1MPY P,T,@A;P=A*X1MOVA T,@X2;T=X2;ACC=A*X1MPY P,T,@B;P=B*X2MOVA T,@X3 ;T=X3;ACC=A*X1+B*X2MPY P,T,@C;P=C*X3MOVA T,@X4;T=X4;ACC=A*X1+B*X2+C*X3MPY P,T,@D;P=D*X4ADDLACC,P<<PM;ACC=YMOVL@y,ACC Y=A*X1+B*X2+C*X3+D*X432x32LongMultiplicationIMPYAL P,XT,loc32 P=u(XT)*u(loc32)QMPYAL ACC,XT,loc32 ACC=(XT)*(loc32)XYXXO
*
Y0Z1Z0IMACL P,loc32,*XAR7 ACC+=P;P=u(loc32)*u(loc32)QMACL P,loc32,*XAR7 ACC+=P;P=(loc32)*(loc32)Integerlongmultiplicationu(long)=u(long)*u(long)Fractionlongmultiplication:
(long)=(long)*(long)(long)64=(long)32*(long)32Y1*X1Z3Z2AccumulatorP-registerRepeatNext:RPTFeatures:NextinstructioniteratedN+1timesSavescodespace-1word Lowoverhead-1cycleEasytouseNon-interruptibleRequiresuseof||beforenextlineMaybenestedwithinBANZloopsOptions:RPT#8bit upto256iterationsRPTloc16 location“loc16”holdscountvalueInstruction CyclesRPTBANZ14.NExample:intx[5]={0,0,0,0,0};x .usect“samp”,5 MOV AR1,#x RPT #4|| MOV *XAR1++,#0RefertoUserGuideformorerepeatableinstructionsSum-of-Products:RPT/MACXAR1++X0X1...X19MOVT,loc16ADDACC,PMPYP,T,loc16MOVAT,loc16ACC+=PT=*ARn++
P=T*(*ARn++)MAC{ZeroACC&P
Repeatsingle
Dualoperand
lastADD
ZAPA RPT #19|| MAC P,*XAR1++,*XAR7++ ADDL ACC,P<<PMx .usect“sample”,20y .usect“result”,2 .sect“coefficient”a0: .word 0x0101 .word 0x0202 ••• .word 0x2020 .sect“code”SOP: SPM 0 MOVW DP,#y MOVL XAR1,#xMOVL XAR7,#a0 MOVL @y,ACC BSOP,UNCXAR7++A0A1...A19SecondoperandmustuseXAR7ProgramControlALU/MultiplyOperationsDataMoveLogicalOperationsSpecialInstructionsDataMoveInstructionsDATA«DATA(4G«64K)DATA«PGM(4G«4M)FasterthanLoad/Store,avoidsaccumulatorAllowsaccesstoprogrammemoryOptimalwithRPT(speedandcodesize)InRPT,non-memaddressisauto-incrementedinPCMOVloc16,*(0:16bit)MOV*(0:16bit),loc1632-bitaddressmemorylocation16-bitaddressconcatenatedwith16leadingzeros .sect“.code”START: MOVL XAR5,#x MOVL XAR7,#TBL
RPT #len-1|| PREAD *XAR5++,*XAR7 ...x .usect “.samp”,4 .sect“.coeff”TBL: .word 1,2,3,4len .set $-TBLPREAD loc16,*XAR7PWRITE *XAR7,loc16pointerwitha22-bitprogrammemoryaddressConditionalMovesInstruction Execution(ifCONDismet)MOVloc16,AX,COND[loc16]=AXMOVBloc16,#8bit,COND[loc16]=8bitIfA<B,ThenB=AAccumulator00000120MOVW DP,#AMOV AL,@ACMP AL,@BExampleA.usect “var”,2,1B.set A+1.sect “code”MOV@B,AL,LT01200320DataMemoryBA0120DataMemoryBA0120BeforeAfterInstruction
Execution(ifCONDismet)MOVLloc32,ACC,COND[loc32]=AXByteOperationsMOVBAX.LSB,loc1600000000ByteAXMOVBAX.MSB,loc16ByteNochangeAXMOVBloc16,AX.MSBByteloc16NochangeMOVBloc16,AX.LSBByteloc16NochangeForloc16=*+XARn[Offset]OddOffsetEvenOffsetloc16Byte= 1.Lowbyteforregisteraddressing 2.Lowbytefordirectaddressing 3.SelectedbyteforoffsetindirectaddressingByteAddressingMOVL XAR2,#MemAMOVB *+XAR2[1],AL.LSBMOVB *+XAR2[2],AL.MSBMOVB *+XAR2[5],AH.LSBMOVB *+XAR2[6],AH.MSBAR2AH.MSBAH.LSBAL.MSBAL.LSB16bitmemory01020506123456780407000334561278MOVL XAR2,#MemAMOVBAL.LSB,*+XAR2[1]MOVBAL.MSB,*+XAR2[2]MOVBAH.LSB,*+XAR2[4]MOVBAH.MSB,*+XAR2[7]ExampleofBytePackingExampleofByteUn-PackingTestandChangeMemoryInstruction ExecutionAffectsTBIT loc16,#(0-15) ST0(TC)=loc16(bit_no) TCTSET loc16,#(0-15) Test(loc16(bit))thensetbit TCTCLR loc16,#(0-15) Test(loc16(bit))thenclrbit TCCMPB AX,#8bit
Test(AX-8bitunsigned) C,N,ZCMP AX,loc16 Test(AX–loc16) C,N,ZCMP loc16,#16b Test(loc16-#16bitsigned) C,N,ZCMPL ACC,@P Test(ACC-P<<PM) C,N,ZMIN/MAXOperations MOVL ACC,#0 MOVL XAR1,#table RPT #(table_length–1)|| MAXL ACC,*XAR1++Findthemaximum32-bitnumberinatable:
Instruction ExecutionMAX ACC,loc16 ifACC<loc16,ACC=loc16 ifACC>=loc16,donothingMIN ACC,loc16 ifACC>loc16,ACC=loc16 ifACC<=loc16,donothingMAXL ACC,loc32 ifACC<loc32,ACC=loc32 ifACC>=loc32,donothingMINL ACC,loc32 ifACC>loc32,ACC=loc32 ifACC<=loc32,donothingMAXCUL P,loc32 ifP<loc32,P=loc32(for64bitmath) ifP>=loc32,donothingMINCUL P,loc32 ifP>loc32,P=loc32(for64bitmath) ifP<=loc32,donothingRead-Modify-WriteInstructionsANDloc16,#16bORloc16,#16bXORloc16,#16bADDloc16,#16bSUBRloc16,#16bANDloc16,AXORloc16,AXXORloc16,AXADDloc16,AXSUBloc16,AXSUBRloc16,AXINCloc16DECloc16TSETloc16,#bitTCLRloc16,#bitAH,
AL16-bit
constantWorkdirectlyonmemory–bypassACCAtomicOperations–protectedfrominterruptsRead-Mod
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学信息技术四年级上册第1课《制作月历》说课稿
- 2025年西师新版选修3化学上册月考试卷
- 2025年浙教新版选修6地理上册阶段测试试卷
- 2025年苏教版七年级地理上册阶段测试试卷
- 2025年鲁科版九年级科学上册阶段测试试卷
- 2024版物业公司的购销合同
- 生物制造产业园项目可行性研究与风险评估报告
- 2025年冀教版七年级历史上册月考试卷含答案
- 2024年浙教版选修1生物下册阶段测试试卷
- 2025年粤人版四年级语文下册阶段测试试卷
- 电动汽车胶粘剂市场洞察报告
- 不锈钢楼梯扶手安装合同
- 开荒保洁物业管理开荒保洁服务实施方案
- GA/T 2015-2023芬太尼类药物专用智能柜通用技术规范
- 新华DCS软件2.0版使用教程-文档资料
- 住所的承诺书范文
- 售前解决方案部门管理规章制度
- 幼儿园游戏活动材料投放与指导课件
- 《城市道路工程设计规范》宣贯
- 电力工程管理培训课件
- 志愿服务证明(多模板)
评论
0/150
提交评论