第三章、DSP指令系统.ppt_第1页
第三章、DSP指令系统.ppt_第2页
第三章、DSP指令系统.ppt_第3页
第三章、DSP指令系统.ppt_第4页
第三章、DSP指令系统.ppt_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、54X指令系统,介绍的是汇编指令系统 不同的型号指令系统也不尽相同 助记符指令是由操作码和操作数组成。 LD #0040H,A,3.1 寻址方式,一、立即数寻址 指令中有个固定的立即数。 短立即数有3,5,8或9位 长立即数为16位,短立即数: LD #0F0H,DP LD #05H,ASM LD #010,ARP,长立即数:ST #1020H,0080H,二、绝对地址寻址 指令中有个固定的地址,指令按照此地址进行数据寻址。 绝对地址的代码为16位,指令大于2个字节。 有4种类型: 1、数据存储器地址寻址(程序中固定的地址是数据存储器单元) MVKD DRR20,*AR2,2、程序存储器地址寻

2、址 (程序中固定的地址是程序存储器单元) MVPD TABLE1,*AR2 3、端口寻址 把端口数据复制到数据存储单元(只有助记符PORTR,PORTW) PORTR F2F0,*AR5 PORTW *AR5,F2F0,4、 *(1k)寻址 是用一个符号或常数来确定数据存储器的一个地址 LD *(BUFFER),A 不能与循环指令(RPT,RPT)一起使用,三、累加器寻址 把累加器内的当前值作为地址区访问该单元的存储器。 只有两条指令:READA和WRITA READA是读取累加器所确定的单元地址内容读出,写进Smem操作地址中 例:30H DB:50 LD 30H,A READA 0060H

3、,四、直接寻址 直接寻址是指在指令中包含有数据存储器地址的地7位,用这7位作为偏移地址并与基地址组成一个16位的数据存储器地址。 直接寻址的语法是用一个符号或常数来确定偏移值 直接寻址访问方便快捷,每条指令只要一个字。,代码格式 158 7 60 DP基准的直接寻址 例:LD #001H,DP RSBX CPL LD 30H,A,SP为基准的直接寻址,例: A=FF80123456H STM #1080 ,SP STL A,30H,例1、直接寻址:x=01FFH、y=0200H ST #0001,*(0180H) ST #1000,*(x) ST #500,*(y) LD #x,DP LD x

4、,A ADD 00H,A LD #y,DP ADD 00H,A,例2、堆栈指针直接寻址 SP0010H SSBX CPL LD 1,A ADD 2,A SP,五、间接寻址 按照辅助寄存器中的地址访问存储器。 可以通过寄存器访问64K的数据存储器。 有8个辅助寄存器和2个辅助寄存器算术单元(ARAU0和ARAU1)。 能够在一条指令中访问两个数据存储器单元。,1、单操作数寻址方式,(AR2)=0100H (0100H)=0030H LD *AR2,A (A)=0030H (AR2)=0100H,(AR2)=0100H (0100H)=0030H (0FFH)=200 LD *AR2-,A LD

5、*AR2,B (A)=0030H (AR2)=00FFH (B)=200,(AR2)=0100H (AR0)=0002H (0100H)=0030H (0101H)=100 (0102H)=200 LD *AR2+0,A LD *AR2,B (A)=0030H (AR2)=0102H (B)=200,2、循环寻址 一个循环缓冲器就是包括最近的数据的活动窗口,当新的数据到来时缓冲器就会覆盖最早的数据。 循环缓冲器的实现关键是循环寻址的实现,循环长度BK确定缓冲器的大小。 指令 STM #1K,BK 循环缓冲器必须是一个N位(N是满足2N BK)边界开始。循环寻址的起始地址必须有最后N位0。,循环

6、寻址的有效基地址(EFB)是用户所选定的寄存器(ARx)的低N位置0后得到的,末地址是通过BK的低N位代替ARx的低N位得到的。 例:STM #007H,BK STM #03FFH,AR0 起始地址: 循环末地址: 循环寻址过程:,例:STM #007H,BK STM #03FDH,AR0 起始地址: 循环末地址: 循环寻址过程:,8,1,3、位倒序寻址 位倒序寻址有效提高了FFT算法的速度。 使用位倒序寻址把AR0加到辅助寄存器中,地址以位倒序的方式产生。 位倒序,进位是从左向右 0101 1100 例:若(AR0)=0000 1000 (AR2)= 0110 0000 *AR2+0B ;

7、(AR2)= 0110 1000 *AR2+0B ; (AR2)= 0110 0100 *AR2+0B ; (AR2)= 0110 1100,0,1,1,1,位倒序寻址图,4、双数据寻址 即在一个指令中,同时对两个存储器进行读,或一个读一个写的操作。 使用Xmem和Ymem代表这两个数 若两个操作数一个读一个写时,Ymem代表写操作数。 158 76 54 32 10,MAC *AR2+,*AR3-,A MAC *AR0+,*AR3-,A X MAC *AR2+0,*AR3-,A X MAC *AR2+%,*AR3-,A X,六、存储器映射寄存器寻址 用来修改存储器映射寄存器而不影响当前数据页

8、指针和堆栈指针的值,以存储器映射寄存器中修改值去寻址。 直接寻址方式下,存储器地址高9位为0 间接寻址方式下,只用当前辅助寄存器的低7位 例:AR1=FFA5H, 则低7位为:25H,地址PRD=0025H,8条映射寄存器寻址指令,七、堆栈寻址 把数据压入和弹出堆栈,按照先进后出的原则进行寻址。 用来在中断和调用子程序期间自动存放程序计数器,也能存放额外的数据项或传递数据值。 对堆栈寻址,它总是指向存放在堆栈中的最后一个元素。 共有4条指令:PSHD;PSHM;POPD;POPM,3.2 指令系统,有两套指令系统,助记符方式和表达式方式。 指令系统按功能分为四类:算术运算指令、逻辑运算指令、程

9、序控制指令以及加载 指令系统中常用的符号和缩写。(见课本),1、算术运算指令 算术运算指令用于完成加、减、乘、除等算术运算。 1)加法指令 助记符有ADD用于一般加法运算 ADDS用于无符号数运算 ADDM专用于立即数的加法运算 ADDC用于带进位位的加法运算,如果目的累加器被指定,结果存放在dst中,如果没有被指定,则结果保存到src中。 移位操作数SHIFT的范围为1615。 表示整数时有有符号数和无符号数两种形式,有符号数时最高位表示符号位,1位负数,0为正数。 DSP表示小数时,小数点的位置可以自己设定,但为了方便处理,一般安排在最高位后面,这样最高位表示符号位,次高位表示0.5,然后

10、是0.25,依次减半。,例1、 LD#1200H,A STM#0100H,AR3 ST #1500H,0100H ADD *AR3+,14,A LD#1800H,B ADD A,-8,B LD#1800H,B ADD #4568H,8,A,B ST #1300H,00FFH ST#1400H,0100H ST#1500H,0101H STM#0100H,AR2 ADD * AR2,* AR3+,A,A=0000 2700H,B=0000 2718H,练习: 将从0100H单元开始10个数据进行累加。 STM #0100H,AR2 LD#0,A RPT #9 ADD *AR2+,A,2)减法指令

11、 减法指令有13条,有多条减法指令,SUB,SUBB,SUBC,SUBS,其中SUBS用于无符号数的减法运算,SUBB用于带借位的减法运算。 54系列中没有专门的除法指令,可用乘法来实现,也可以用减法,重复减去16次来实现。,例2: ST#0008H,0405H LD#000AH,A SSBXC SUBB5,A,(A)=0002H,例3:利用减去16次来实现除法,结果保存到0110H和0111H单元中 LD#0041H,A STM #0100H,AR2 STM #0110H,AR3 ST#0007H,*AR2 RPT#15 SUBC *AR2,A STL A,*AR3+ STH A,*AR3,

12、3)乘法指令 所有的乘法运算,其结果都是保存在累加器中。 乘法指令助记符有,MPY、MPYR、MPYA、MPYU、SQUR 如果FRCT为1,是小数相乘,结果传送至累加器时会自动地左移一位,例4、用MPY #1K,dst指令做乘法运算 LD #0030H,A STM #0100H,AR2 ST #2000H,*AR2 RSBXFRCT LD #2,DP LD 0,T MPY #-2,A,4)乘加指令 完成一次乘法运算,再将结果跟源累加器的内容相加。 共有13种句法,其中MAC有4种,MACR有两种,MACA有两种,MACAR有两种,MACD有一种,MACP有一种,MACSU有一种。,5)乘减指

13、令 乘减指令跟乘加指令基本相同 完成从累加器B和源累加器src或目的累加器dst中减去T寄存器或一个操作数与另一个操作数的乘积,结果保存在累加器B或dst或src中。,例5、用MAC #1k,arc,dst及 MAC Xmem,Ymem,arc,dst做乘加运算 RSBXFRCT STM#0100H,AR2 ST#1000H,1000H LD*AR2,T LD#4000H,A MAC #0345H,A,B STM#0200H,*AR3 ST#1234H,*AR2 MACR*AR3+,*AR2+,A,B,例6、编制计算y=0.1*0.8-0.2*0.6-0.3*0.9的程序段。,Table,x,

14、a,y,LD*AR1+,A STL A,*AR2+,小数的表示Q15格式 在Q15的格式中,215=32768=1 而0.1是32768的1/10,表示为(1/10)*32768=1*32768/10 而0.2为2*32768/10,。,Q0,Q15,.bssx,3 .bssa,3 .bssy,1 Table: .word 1*32768/10 -2*32768/10 3*32768/10 .word 8*32768/10 6*32768/10 -9*32768/10 Start: STM#table,AR1 STM #x,AR2 STM #5,AR0 LD #0,A,Loop:LD*AR1+

15、,A STL A,*AR2+ BANZ loop,*AR0- SSBXFRCT CALLSUM end:Bend SUM:STM#a,AR3 STM#x,AR4 RPTZ A,#2 MAC *AR3+,*AR4+,A STHA,Y RET .end,双精度/双16位操作指令,专用指令,2、逻辑指令 逻辑指令按功能分可以分成5组:与指令、或指令、异或指令、移位指令和测试指令。 1)与逻辑运算指令,例:将端口读入数据高8为进行屏蔽(置0)。 STM #0100H,AR2 PORTR 0030H,*AR2 AND #00FFH,*AR2,A,2)或逻辑运算指令,3)异或逻辑运算指令,4)移位逻辑运算

16、指令,普通移位: 循环左移位: 带进位位循环左移: 逻辑右移:不管最左边一位是0还是1,都补0. 算术右移:右移是按最左边(高位)来补的(即如果是1就补1,如果是0就补0,不改变该位的值,0,1,1,C,5)测试指令,例:1)测试数据中的位;2)比较数据大小 ST#00FFH,AR0 ST#00FEH,AR4 ST#0FFFH,*AR0 ST#1FFFH,*AR4 BIT *AR4,12 CMPR2,AR4,TC=1;测试的是1FFFH 的第3位,TC=1;“2”是指AR4是否 大于AR0,3、程序控制指令 程序控制指令是用来控制程序的执行顺序的。 程序控制指令包括分支转移指令、调用指令、中断

17、指令、返回指令、重复指令、堆栈指令和混合程序控制指令。 操作码中,有后缀D的指令是延时指令,指令执行时先执行紧跟的下一条指令。,1)分支转移指令,例:在累加器中连加 STM#0004H,AR2 STM#0007H,*AR2 LD#0050H,A LOOP:ADD#40H,A BANZLOOP,*AR2- STLA,0030H,2)调用指令,3)中断指令 例:INTR3,4)返回指令,5)重复指令 RPT#99H NOP RPTZA,#99H NOP,6)堆栈操作指令,7)其他程序控制指令,LD#0010H,A XC1,ALEQ MAR *AR1+ ADDA,8,4、加载和存储指令 1)加载指令 加载和存储指令用于完成数据的读入和存储。加载和存储指令包括加载指令、存储指令、条件存储指令、并行加载和存储指令、并行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论