第7章汇编语言程序课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第7章汇编语言程序课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序 课件
- 资源描述:
-
1、第第7章章 汇编语言程序设计汇编语言程序设计n7.1 程序流程控制程序流程控制n7.2 数据块传送数据块传送n7.3 定点数的基本算术运算定点数的基本算术运算n7.4 长字运算和并行运算长字运算和并行运算n7.5 FIR滤波器的滤波器的DSP实现实现n7.6 IIR数字滤波器的数字滤波器的DSP实现实现n7.7 FFT运算的运算的DSP实现实现7.1 程序流程控制程序流程控制n7.1.1 程序存储器地址生成程序存储器地址生成n7.1.2 条件操作条件操作n7.1.3 分支转移分支转移n7.1.4 调用与返回调用与返回n7.1.5 重复操作重复操作n7.1.6 TMS320C54x中断系统中断系
2、统n7.1.7 堆栈的使用堆栈的使用返回首页7.1.1 程序存储器地址生成程序存储器地址生成 程序存储器中存放指令代码、参数表和立即数。程序程序存储器中存放指令代码、参数表和立即数。程序地址产生逻辑(地址产生逻辑(PAGEN),),包括以下包括以下5个寄存器(如图个寄存器(如图7-1所示):所示):程序计数器(程序计数器(PC););重复计数器(重复计数器(RC););块重复计数器(块重复计数器(BRC););块重复起始地址寄存器(块重复起始地址寄存器(RSA););块重复结束地址寄存器(块重复结束地址寄存器(REA)。)。图7-1 程序地址产生逻辑(PAGEN)寄存器返回本节7.1.2 条件
3、操作条件操作表7-1 条件指令中的各种条件操作符号条 件说 明操作符号条 件说 明AEQA=0累加器A等于0 AOVAOV=1 累加器A溢出 BEQB=0累加器B等于0 BOVBOV=1 累加器B溢出 ANEQA 0累加器A不等于0 ANOVAOV=0 累加器A不溢出 BNEQB 0累加器B不等于0 BNOVBOV=0 累加器B不溢出 ALTA0累加器A小于0 CC=1ALU进位位置1 BLTB0累加器A大于0 BIOBIO低 BIO信号电平为低 BGTB0累加器B大于0 NBIOBIO高 BIO信号电平为高 AGEQA 0累加器A大于等于0 UNC无无条件操作 BGEQB 0累加器B大于等于
4、0 表7-2 多条件指令中的条件组合返回本节第1组第2组A类B类A类B类C类 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO7.1.3 分支转移分支转移分支转移指令 分 类 指 令 说 明 无条件分支转移 BD 用该指令指定的地址加载PC BACCD 用累加器的低16位指定的地址加载PC 条 件分支转移 BCD 若满足指令给定条件,用该指令指定的地址加载PC BANGD 若当前选择辅助寄存器不等于0,用该指令指定的地址加载PC 远 程分支转移 FBD 用该指令指定的地址加载PC和XPC FBACCD 用累加器的低23位指定的地址加载PC和XPC 7.1.4 调
5、用与返回调用与返回子程序调用指令 分 类 指 令 说 明 无条件调用 CALLD 将返回的地址压入堆栈,并用该指令指定的地址加载PC CALAD 将返回的地址压入堆栈,用累加器A或B指定的地址加载PC 条件调用 CCD 如果满足指令给定条件,将返回的地址压入堆栈,并用该 指令指定的地址加载PC远程调用 FCALL D 将XPC和PC压入堆栈,并用该指令指定的地址加载PC和XPC FCALA D 将XPC和PC压入堆栈,用累加器的低23位指定的地址加载 PC和XPC 子程序返回指令 分 类 指 令 说 明 无条件返回 RETD 将堆栈顶部的返回地址加载到PC。RETED 将堆栈顶部的返回地址加载
6、到PC,并使能可屏蔽中断。RETFD 将RTN寄存器中的返回地址加载到PC,并使能可屏蔽中断。条件返回 RCD 如果满足指令给定条件,将堆栈顶部的返回地址加载到PC。远程返回 FCALL D 将堆栈顶部的值弹出加载到XPC,将堆栈中下一个值弹出加载到PC。FCALA D 将堆栈顶部的值弹出加载到XPC,将堆栈中下一个值弹出加载到PC,并使能可屏蔽中断。7.1.5 重复操作重复操作7.1.6 TMS320C54x中断系统中断系统1中断类型中断类型n C54x支持软件中断和硬件中断。软件中断由程序指支持软件中断和硬件中断。软件中断由程序指令产生(令产生(INTR、TRAP或或RESET)。)。硬件
7、中断由设备的硬件中断由设备的一个信号产生,包括两种类型:一个信号产生,包括两种类型:外部硬件中断由外部中断口的信号触发;外部硬件中断由外部中断口的信号触发;内部硬件中断由片内外设的信号触发。内部硬件中断由片内外设的信号触发。软件中断不分优先级,硬件中断有优先级软件中断不分优先级,硬件中断有优先级,其中,其中,1为为最高优先级。最高优先级。无论是硬件中断还是软件中断,都属于以下两种类型:无论是硬件中断还是软件中断,都属于以下两种类型:(1)可屏蔽中断)可屏蔽中断(2)非屏蔽中断)非屏蔽中断 可屏蔽中断可屏蔽中断:是可用软件来屏蔽或开放的中断,即通是可用软件来屏蔽或开放的中断,即通过对中断屏蔽寄存
8、器过对中断屏蔽寄存器(IMR)(IMR)中的相应位和状态寄存器中的相应位和状态寄存器(ST1)(ST1)中的中断允许控制位中的中断允许控制位INTMINTM编程来屏蔽或开放该编程来屏蔽或开放该中断。中断。TMS320C54xTMS320C54x最多可以支持最多可以支持1616个用户可屏蔽中个用户可屏蔽中断断(SINT15(SINT15SINT0)SINT0),但有的处理器只用了其中的一,但有的处理器只用了其中的一部分。有些中断有两个名称。部分。有些中断有两个名称。非可屏蔽中断非可屏蔽中断:是不能用软件来屏蔽的中断,不受是不能用软件来屏蔽的中断,不受IMRIMR和和INTMINTM位的影响。位的
9、影响。TMS320C54xTMS320C54x对这一类中断总是对这一类中断总是响应的,并从主程序转移到中断服务程序。响应的,并从主程序转移到中断服务程序。表7-9 C5402中断源的中断向量及硬件中断优先权15 141312111098保 留DMAC5DMAC4BXINT1BRINT1HPINTINT376543210TINT1DMAC0BXINT0BRINT0TINT0INT2INT1INT015 141312111098保 留DMAC5DMAC4BXINT1BRINT1HPINTINT376543210TINT1DMAC0BXINT0BRINT0TINT0INT2INT1INT0接受中断请
10、求是可屏蔽中断吗?INTM=0?IMR 屏蔽位=1?是硬件中断或INTR指令中断吗?响应中断,发出 信号 IACKPC 保存到软件堆栈执行中断服务程序中断返回,恢复PC继续执行主程序INTM 位置1否是是是否是否否中断向量号左移两位后中断向量地址图7-3 中断向量地址的产生返回本节.mmregs .def _c_int00STACK .usect STACK,100ht0_cout.usect vars,1;计数器计数器 t0_flag.usect “vars”,1;当前当前XF输出电平标志。输出电平标志。t0_flag=1,则则XF=1;;t0_flag=0,则,则XF=0TVAL.set1
11、639;1640(10(61=1ms,又因中断程序中计数器初值又因中断程序中计数器初值 ;t0_cout=1000,所以定时时间:,所以定时时间:1ms(1000=1sTIM0.set0024H;定时器定时器0寄存器地址寄存器地址PRD0.set0025HTCR0.set0026H.data TIMES.int TVAL;定时器时间常数定时器时间常数.text 中断矢量表程序举例中断矢量表程序举例 汇编程序文件汇编程序文件(timers.asm)如下:如下:*;中断矢量表程序段中断矢量表程序段_c_int00b startnopnopNMIrete ;非屏蔽中断非屏蔽中断nopnopnopSI
12、NT17.space 4*16 ;各软件中断各软件中断SINT18.space 4*16SINT19.space 4*16SINT20.space 4*16SINT21.space 4*16SINT22.space 4*16SINT23.space 4*16SINT24.space 4*16SINT25.space 4*16SINT26.space 4*16SINT27.space 4*16SINT28.space 4*16SINT29.space 4*16SINT30.space 4*16INT0rsbx intm ;外中断外中断0中断中断retenopnopINT1rsbx intm ;外
13、中断外中断1中断中断retenopnopINT2rsbx intm ;外中断外中断2中断中断retenopnopTINT:bd timer ;定时器中断向量定时器中断向量nopnopnopRINT0:rete;串口串口0接收中断接收中断nopnopnopXINT0:rete;串口串口0发送中断发送中断nopnopnop SINT6.space 4*16;软件中断软件中断SINT7.space 4*16;软件中断软件中断INT3:rete;外中断外中断3中断中断nopnopnop HPINT:rete ;主机中断主机中断nopnopnop RINT1:rete ;串口串口1接收中断接收中断nop
14、nopnopXINT1:rete ;串口串口1发送中断发送中断nopnopnop*start:LD#0,DP STM#STACK+100h,SP STM#07FFFh,SWWSR STM#1020h,PMST;计数器设置为计数器设置为 1000(1s)ST#1000,*(t0_cout)SSBX INTM;关全部中断关全部中断 LD#TIMES,A READA TIM0 ;初始化初始化 TIM,PRD READA PRD0 STM#669h,TCR0;初始化初始化TCR0;初始化初始化 IMR,使能使能 timer0 中断中断 STM#8,IMR RSBX INTM ;开放全部中断开放全部中断
15、WAIT:B WAIT*;定时器定时器0中断服务子程序中断服务子程序timer:ADDM#-1,*(t0_cout);计数器减计数器减1 .RETE .end7.1.7 堆栈的使用堆栈的使用 堆栈被用于保存中断程序、调用子程序的返堆栈被用于保存中断程序、调用子程序的返回地址,也用于保护和恢复用户指定的寄存器和回地址,也用于保护和恢复用户指定的寄存器和数据,还可用于程序调用时的参数传递。返回地数据,还可用于程序调用时的参数传递。返回地址是由址是由DSP自动保存的。自动保存的。用户编写的压栈指令和出栈指令将指定的内用户编写的压栈指令和出栈指令将指定的内容压入和弹出堆栈,容压入和弹出堆栈,SP总是指
16、向最后压入堆栈的总是指向最后压入堆栈的数据,压栈之前数据,压栈之前SP减减1,出栈之后,出栈之后SP加加1。C54x支持软件堆栈,在用户指定的存储区开支持软件堆栈,在用户指定的存储区开辟一块存储区作为堆栈存储器。堆栈的定义及初辟一块存储区作为堆栈存储器。堆栈的定义及初始化步骤为:始化步骤为:1)声明具有适当长度的未初始化段;)声明具有适当长度的未初始化段;2)将堆栈指针指向栈底;)将堆栈指针指向栈底;3)在链接命令文件)在链接命令文件(.cmd)中将堆栈段放入中将堆栈段放入内部数据存储区。内部数据存储区。返回本节数据RAMDDDDDSPD数据RAMAR4DBF8DBF8DBF8DBF8DBF8
17、SPDBF87.2 数据块传送数据块传送1 1编写汇编源程序为编写汇编源程序为 .mmregs .def _c_int00 .dataTBL:.word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1 7,18,19 .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1PROM:.usect PROM,20 .bss a,20 .bss x,20 .bss y,20DATA:.usectDATA,20 .text_c_int00 b start nop nopstart:STM#a,AR1;a20=0,1,2,3,4,5
18、,6,7,8,9,10,;11,12,13,14,15,16,17,18,19 RPT#39 ;x20=1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+;1,1,1,1,1,1,1,1,1,1 STM#x,AR2;将数据存储器中的数组将数据存储器中的数组x20复制到数组复制到数组y20 STM#y,AR3 RPT#19 MVDD*AR2+,*AR3+STM#a,AR1;将数据存储器中的将数据存储器中的a20写入到程序存储器写入到程序存储器PROM LD#PROM,A STM#19,AR3LOOPP:WRITA *AR1+ADD#1,A,A BANZ LOOPP,*AR3-L
19、D#PROM-1,A ;读程序存储器读程序存储器PROM中中20个数据存入个数据存入DATA STM#DATA,AR1 ST#19,BRC RPTB LOOP2 ADD#1,A,ALOOP2:READA *AR1+;该指令为单字指令该指令为单字指令WAIT:NOP B WAIT2 2建立汇编源程序建立汇编源程序n点 击点 击 CCS C5000图标,进入图标,进入 CCS环境,再点 击环境,再点 击FileNewSource File菜单命令,打开一个空白文档,菜单命令,打开一个空白文档,将汇编源程序逐条输入。将汇编源程序逐条输入。n单击单击FileSave菜单命令,出现如图菜单命令,出现如图
20、7-5所示的窗口,选所示的窗口,选择择D:Program Filesti myprojcetsmymove子目录,在子目录,在“文件名文件名”一栏中输入一栏中输入mymove,并选择保存类型为并选择保存类型为Assembly Source Files(*.asm),),单击单击“保存保存”按钮,按钮,以上汇编程序被存盘。以上汇编程序被存盘。3 3建立链接命令文件建立链接命令文件n点击点击FileNewSource File菜单命令,打开一个空白菜单命令,打开一个空白文档,逐条输入链接命令文件。文档,逐条输入链接命令文件。mymove.obj -o mymove.out -m mymove.ma
21、p MEMORY PAGE 0:RAM:origin=1000h,length=800h RAM1:origin=2000h,length=300h PAGE 1:DARAM1:origin=0100h,length=100h DARAM2:origin=0200h,length=100h SECTIONS.data :RAM PAGE 0.text :RAM PAGE 0 PROM:RAM1 PAGE 0.bss:DARAM1 PAGE 1 DATA:DARAM2 PAGE 1n点击点击FileSave菜单命令,如图菜单命令,如图7-5所示,选择所示,选择D:Program Filestim
22、yprojcetsmymove子目录,在子目录,在“文件名文件名”一栏中输入一栏中输入mymove,并选择保存类型为并选择保存类型为TI Command Language File(*.cmd),),单击单击“保存保存”按按钮,以上链接命令程序被存盘。钮,以上链接命令程序被存盘。4 4创建一个新工程创建一个新工程n在在Project菜单中选择菜单中选择New项,弹出项,弹出Project Creation(工程创建)窗口,如图工程创建)窗口,如图7-6所示。在所示。在Project一栏键入一栏键入mymove,然后单击然后单击“完成完成”按按钮,钮,CCS将创建一个名为将创建一个名为mymov
23、e.pjt的工程,的工程,此文件保存了工程的设置信息及工程中的文件引此文件保存了工程的设置信息及工程中的文件引用情况。用情况。图7-5 保存汇编源程序 图7-6 工程创建窗口5 5将有关文件添加到工程中将有关文件添加到工程中n从从Project菜单中选取菜单中选取Add Files to Project命令,命令,选择文件选择文件mymove.asm,双击将双击将mymove.asm添加到工程中。添加到工程中。n点击点击ProjectAdd Files to Project菜单命令,菜单命令,将将mymove.cmd添加到工程文件中。添加到工程文件中。n逐层打开如图逐层打开如图7-7所示。双击
24、所示。双击mymove.asm打开文打开文件,可以观察和修改件,可以观察和修改mymove.asm文件的内容。文件的内容。6汇编、编译和链接产生汇编、编译和链接产生.out文件文件n点击点击Project菜单中的菜单中的Rebuild All。请注意在监请注意在监视窗口显示的汇编、编译和链接的相关信息。如视窗口显示的汇编、编译和链接的相关信息。如果没有错误,将产生果没有错误,将产生mymove.out文件;如果有文件;如果有错,在监视窗口以红色字体显示出错行,用鼠标错,在监视窗口以红色字体显示出错行,用鼠标双击该行,光标跳将至源程序相应的出错行。修双击该行,光标跳将至源程序相应的出错行。修改错
25、误后,重新汇编、链接。改错误后,重新汇编、链接。7加载并运行加载并运行.out文件文件n执行菜单命令执行菜单命令FileLoad Program,选择选择mymove.out并打开,将并打开,将Rebuild All生成的程序生成的程序加载到加载到DSP中。中。CCS将自动打开一个反汇编窗口,将自动打开一个反汇编窗口,显示加载程序的反汇编指令。显示加载程序的反汇编指令。n点击点击DebugRun菜单命令运行程序,单步执行菜单命令运行程序,单步执行程序则点击程序则点击DebugStepInto菜单命令,或按菜单命令,或按F8键。键。8观察运行结果观察运行结果n点击点击ViewMemory菜单命令
展开阅读全文