DSP戴明帧主编第5章汇编语言程序设计.ppt_第1页
DSP戴明帧主编第5章汇编语言程序设计.ppt_第2页
DSP戴明帧主编第5章汇编语言程序设计.ppt_第3页
DSP戴明帧主编第5章汇编语言程序设计.ppt_第4页
DSP戴明帧主编第5章汇编语言程序设计.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章 汇编语言程序设计,概述 程序的控制与转移(重点) 堆栈的使用方法 加、减法和乘法运算(重点) 重复操作(重点) 数据块传送(重点) 双操作数乘法 长字运算和并行运算,2,概述,汇编语言源程序格式:,标号:,助记符,操作数,;注释,用空格或 T 隔开,书写格式规则详见P140,汇编语言程序以.asm为扩展名。一条语句占源程序的一行,汇编器每行最多读200个字符。因此,语句的执行部分必须限制在200个字符以内。,3,5.1程序的控制与转移,4,5.1程序的控制与转移,5,5.1程序的控制与转移,组间条件只能“或” 第一组两类条件可以“与”/“或”,但累加器必须是同一个 第二组三类条件可以各

2、选一个条件“与”/“或” 同组同类条件不能选择两个,5.1程序的控制与转移,例5-1 条件分支转移,RC TC CC sub, BNEQ BC new, AGT, AOV,;TC=1返回,TC=0继续 ;B0,调用sub,B=0继续 ;A0且溢出(“与”的关系),转至new,否则继续,5.1程序的控制与转移,BC new, AGT BC new, AOV,;A0,转至new,否则继续 ;A溢出,转至new,否则继续,若例1中两个条件相“或”怎么办?,8,循环操作,5.1程序的控制与转移,.bssx, 5 ;为变量x分配5个存储单元 .bssy,1 ;为变量y分配1个存储单元 STM#x, AR

3、1 ; AR1指向x的首地址 STM#4,AR2 ;将操作数#4赋给AR2 LD#0,A ;将累加器A清0 loop:ADD*AR1+, A ;执行加法运算,结果存入累加器A中 BANZloop, *AR2- ; AR2不为0转移,重复执行5次 STLA,y ;将结果(A的低16位)送往变量y存储单元,.title Ex534.asm ;为汇编语言源文件取名 .mmregs ;定义存储器映像寄存器 stack.usectSTACK, 10h ;为堆栈空间分配16个存储单元 .bssx, 5 ;为变量x分配5个存储单元 .bssy,1 ;为变量y分配1个存储单元 .def start ;定义标号

4、start .data ;定义数据代码 table: .word1,2,3,4,5 ;为标号table开始的5个存储单元赋值 .text ;定义文本代码段 start:STM#0, SWWSR ; SWWSR置0,不插等待周期 STM#stack+10h, SP ;设置堆栈指针 CALLinit ;调用子程序init STM#x, AR1 ;将变量x的首地址赋给AR1 STM#4,AR2 ;将操作数#4赋给AR2 LD#0,A ;将累加器A清0 loop:ADD*AR1+, A ;执行加法运算,结果存入累加器A中 BANZloop, *AR2- ; AR2不为0转移,重复执行5次 STLA,y

5、 ;将结果(A的低16位)送往变量y存储单元 init: STM#x, AR1 ; AR1指向x的首地址 RPT#4 ;重复执行下条指令5次 MVPDtable, *AR1+ ;重复传递共5个数据 RET ;子程序返回 .end ;源程序结束,利用CMPR指令进行比较操作 指定的ARx寄存器(x=17)与AR0比较,测试条件成立TC置1。 例:5-3比较操作后条件分支转移,5.1程序的控制与转移,STM #5, AR1 ;(AR1)=5 STM #10, AR0 ; (AR0)=10 loop: MAR *AR1+ ; AR1=AR1+1 CMPR LT, AR1 ;若AR1- AR0 0,则

6、TC=1,否则为0 BC loop, TC ;若AR1- AR0 0,则循环 若AR1=AR0,则顺序执行,5.2堆栈的使用方法,特点: 16位堆栈指针SP 向堆栈中压入数据时,堆栈指针从高地址向低地址移动 压入堆栈时,先SP-1,再压入数据;弹出操作数时,先弹出数据,后SP+1,10,设置好堆栈后,就可以使用堆栈了,如: CALL pmad ;(SP)-1SP, (PC)+2TOS,pmadPC RET ;(TOS)PC,(SP)+1SP,5.3 加、减法和乘法运算,例5-4 计算z=x+y-w 使用:加法指令ADD,减法指令SUB,11,LD x, A ADD y, A SUB w, A

7、STL A, z,;取x值,A=x ;完成x+y运算,A=x+y ;完成x+y-w运算,A= x+y-w ;计算结果(A的低16位)存入变量z中,5.3 加、减法和乘法运算,例5-5 计算y=mx+b 使用:乘法指令MPY,加法指令ADD,12,LD m, T MPY x, A ADD b, A STL A, y,;取系数m值,T=m ;完成mx乘积,A=mx ;完成mx+b运算,A=mx+b ;计算结果B的低16位存入y中,5.3 加、减法和乘法运算,例5-6 计算y=x1*a1+x2*a2 使用:乘法指令MPY,乘法累加指令MAC,13,LD x1, T MPY a1, A LD x2,

8、T MAC a2, A STL A, y STH A, y+1,;取变量值x1,T=x1 ;完成乘法x1a1运算,A=x1a1 ;取变量值x2, T=x2 ;乘法累加,A=x1a1+x2a2 ;计算结果的低字AL存入y中 ;计算结果的高字AH存入y+1中,5.3 加、减法和乘法运算,例5-7 计算 使用:乘法累加指令MAC,重复执行下条指令RPT,14,15,加法/减法,16,.title Ex_543.asm“ ;为汇编语言源文件取名 .mmregs ;定义存储器映像寄存器 stack .usectSTACK, 10H ;为堆栈空间分配16个存储单元 .bssa,4 ;为系数a分配4个存储单

9、元 .bssx,4 ;为变量x分配4个存储单元 .bssy,1 ;为变量y分配1个存储单元 .defstart ;定义标号start .data ;定义数据代码 table: .word1,2,3,4 ;为标号table开始的 .word8,6,4,2 ; 8个存储单元赋值 .text ;定义文本代码段 start: STM#0, SWWSR ; SWWSR置0,不插等待周期 STM#stack+10H, SP ;设置堆栈指针 STM#a, AR1 ; AR1指向a的首地址 RPT#7 ;重复执行下条指令8次 MVPDtable, *AR1+ ;从程序存储器向数据存储器,重复传递共8个数据 C

10、ALLSUM ;调用子程序SUM end: Bend ;循环等待 SUM: STM#a, AR3 ;将系数a的首地址赋给AR3 STM#x, AR4 ;将变量x的首地址赋给AR4 RPTZA, #3 ;将累加器清0,重复执行下条指令4次 MAC*AR3+, *AR4+, A;执行乘法累加运算,结果存入累计器A中 STLA, y ;将结果(A的低16位)送往变量y存储单元 RET ;子程序返回 .end ;源程序结束,【例5-8】在例5-7的4项乘积ai xi(i=1,2,3,4)中找出最大值,并存放累加器A中。,程序: STM #a, AR1 STM #x, AR2 STM #2, AR3 L

11、D *AR1+,T MPY *AR2+,A loop1: LD *AR1+,T MPY *AR2+,B MAX A BANZ loop1,*AR3-,;系数a的首地址赋给AR1 ;变量x的首地址赋给AR2 ;设置计数器AR3=2 ;取系数T=a1,并修改AR1 ;乘法运算A=a1x1,并修改AR2 ;取系数T=ai,并修改AR1 ;乘法运算B=aixi,并修改AR2 ;求A和B中的最大值 ,结果存入A ;若AR30,则循环,并修改AR3 若AR3=0,则顺序执行,5.3 加、减法和乘法运算,18,5.4 重复操作,例5-9 对一个数组进行初始化X5=0,0,0,0,0,【例5-9】对数组进行初

12、始化,使x5=0,0,0,0,0。,.bss x, 5 STM #x, AR1 LD #0, A RPT #4 STL A,*AR1+,.bss x, 5 STM #x, AR1,RPTZ A, #4 STL A, *AR1+,注意:, 对x5中的5个元素置0,重复次数为4,即执行1次STL A,AR1+指令后,再重复执行4次;, RPTZ指令设定重复次数后,再对累加器清零。,5.4 重复操作,20,块重复操作,例5-10 对数组X5中每个元素加1,例5-10 对数组x5中的每一元素加1。,.bss x, 5 begin: LD #1,B STM #4,BRC STM #x,AR4 RPTB

13、next-1 ADD *AR4,B,A STL A,*AR4+ next: LD #0,B ,;设置数组空间 ;立即数1送入B ;设置重复次数,BRC=4,循环5次 ;数组首地址x送入AR4 ;设置循环结束地址 ;数组数据与B相加,结果存入A中 ;存储数组结果,并修改地址 ;B清0,块重复操作,22,5.5 数据块传送,数据传送指令的特点:,传送速度比加载和存储指令要快; 数据传送不通过累加器; 可寻址程序存储器; 与RPT结合,可实现数据块传送。,23,5.5 数据块传送,例5-11数组X5=1,2,3,4,5初始化(程序存储器和数据存储器之间的数据传送),24,.data TBL: .wo

14、rd 1,2,3,4,5 .bss x,5 .text START: STM #x,AR5 RPT #4 MVPD TBL,*AR5+ ,;定义数据代码段 ;为标号TBL开始的5个存储单元赋初值 ;为变量x分配5个存储单元 ;定义文本代码段 ;将变量x的首地址赋给AR5 ;将下条指令重复执行5次 ;将数据送入X对应地址单元中,5.5 数据块传送,例5-12编写一段程序将数据存储器中的数组x20复制到数组y20。(数据存储器和数据存储器之间的数据传送),25,.bss x,20 .bss y,20 .text LD #x,AR2 LD #y,AR3 RPT #19 MVDD *AR2+,*AR3

15、+ .,;为变量x分配20个存储单元 ;为变量y分配20个存储单元 ;定义文本代码段 ;将变量x的首地址赋给AR2 ;将变量y的首地址赋给AR3 ;将下条指令重复执行20次 ;将(AR2) (AR3),5.5 数据块传送,用双操作数指令编程的特点: 单周期内通过C总线和D总线寻址两个数据 用间接寻址方式获得操作数,且只能用AR2AR5 占用的程序空间小 运行的速度快,26,5.6 双操作数乘法,表5-3 MAC型双操作数指令,寻址方式:*ARn、 *ARn+、 *ARn-、 *ARn+0%,编制求解 的程序段。,27,5.6 双操作数乘法,单操作数指令方案 双操作数指令方案 LD #0,B L

16、D #0,B STM #a,AR2 STM #a,AR2 STM #x,AR3 STM #x,AR3 STM #19,BRC STM #19,BRC RPTB done-1 RPTB done-1 LD *AR2+,T MPY *AR2+,*AR3+,A 3T MPY *AR3+,A 2T ADD A,B ADD A,B done: STH B,y done: STH B,y STL B,y+1 STL B,y+1 节省的总机器周期数=1T*N(迭代次数)=NT。,进一步优化 的程序段。 利用双操作数指令进行乘法累加运算,完成 N 项乘积求和需 2N 个机器周期。如果将乘法累加器单元、多总线以

17、及硬件循环操作结合在一起,可以形成一个优化的乘法累加程序。完成一个 N项乘积求和的操作,只需要 N+2 个机器周期。程序如下:,28,5.6 双操作数乘法,STM #x,AR2 STM #a,AR3 RPTZ A, #19 ;2 个机器周期 MAC *AR2+,*AR3+,A ;1 个机器周期 STH A,y STL A,y+1,29,作业,1、编写 的程序,并注释 2、编写对数组X8=1,2,3,4,5,6,7,8的初始化程序,并注释,长字运算 C54x可以利用长操作数(32位)进行长字运算。,30,5.7 长字运算和并行运算,长字指令 DLD Lmem,dst DST src,Lmem D

18、ADD Lmem,src,dst DSUB Lmem,src,dst DRSUB Lmem,src,dst,;dst=Lmem 单周期 ;Lmem=src 双周期 ;dst=src+Lmem 单周期 ;dst=src-Lmem 单周期 ;dst=Lmem-src 单周期,长操作数在存储器的排列方法 偶地址排列法 指令中给出的地址为偶地址 存储器中低地址存放高16位 存储器中高地址存放底16位 奇地址排列法 指令中给出的地址为奇地址 存储器中低地址存放低16位 存储器中高地址存放高16位,31,5.7 长字运算和并行运算,32,5.7 长字运算和并行运算,偶地址排列法举例 DLD *AR3+, A 执行前: 执行后: A=00 0000 0000 A=00 6CAC BD90 AR3=0100 AR3=0102 (0100h)=6CAC(高

温馨提示

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

评论

0/150

提交评论