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

下载本文档

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

文档简介

第五章 汇编语言程序设计 概述 程序的控制与转移(重点) 堆栈的使用方法 加、减法和乘法运算(重点) 重复操作(重点) 数据块传送(重点) 双操作数乘法 长字运算和并行运算 第5章 汇编语言程 2 概述 p汇编语言源程序格式: 标标号:助记记符操作数;注释释 用空格或 T 隔开 p书写格式规则详见P140 汇编语汇编语 言程序以.asm为扩为扩 展名。一条语语句占 源程序的一行,汇编汇编 器每行最多读读200个字符。因 此,语语句的执执行部分必须须限制在200个字符以内。 第5章 汇编语言程 3 分 类 指 令 说 明 无条件 分支转移 BD 用该指令指定的地址加载PC BACCD 用累加器的低16位指定的地址加载PC 条件 分支转移 BCD 若满足指令给定条件,用该指令指定的地 址加载PC 5.1程序的控制与转转移 第5章 汇编语言程 4 分 类 指 令 说 明 无条件 调用 CALLD 将返回的地址压入堆栈,并用该指令指定的地址加 载PC CALAD 将返回的地址压入堆栈,用累加器A或B指定的地址 加载PC 条件调 用 CCD 如果满足指令给定条件,将返回的地址压入堆栈, 并用该指令指定的地址加载PC 分 类 指 令 说 明 无条件返回 RETD 将堆栈顶部的返回地址加载到PC。 条件返回 RCD 如果满足指令给定条件,将堆栈顶部的返回地址 加载到PC。 5.1程序的控制与转移 第5章 汇编语言程 5 操作符号 条 件说 明操作符号条 件说 明 AEQA=0累加器A等于0 AOVAOV=1 累加器A溢出 BEQB=0累加器B等于0 BOVBOV=1 累加器B溢出 ANEQA0累加器A不等于0 ANOVAOV=0 累加器A不溢出 BNEQB0累加器B不等于0 BNOVBOV=0 累加器B不溢出 ALTA0累加器A大于0 BIO 低 信号电平为低 BGTB0累加器B大于0 NBIO 高 信号电平为高 AGEQA0累加器A大于等于0 UNC无无条件操作 BGEQB0累加器B大于等于0 5.1程序的控制与转移 第5章 汇编语言程 第1组第2组 A类B类A类B类C类 EQ,NEQ,LT LEQ,GT,GEQ OV NOV TC NTC C NC BIO NBIO pp 组间条件只能组间条件只能“ “或或” ” pp 第一组两类条件可以第一组两类条件可以“ “与与” ”/“/“或或” ”,但累加器必须是同一,但累加器必须是同一 个个 pp 第二组三类条件可以各选一个条件第二组三类条件可以各选一个条件“ “与与” ”/“/“或或” ” pp 同组同类条件不能选择两个同组同类条件不能选择两个 5.1程序的控制与转转移 第5章 汇编语言程 例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中两个条件相“或”怎么办? 第5章 汇编语言程 8 循环操作 5.1程序的控制与转移 .bssx, 5 ;为变量x分配5个存储单元 .bssy,1 ;为变量y分配1个存储单元 STM#x, AR1 ; 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.usect“STACK“, 10h ;为堆栈空间分配16个存储单元 .bssx, 5 ;为变量x分配5个存储单元 .bssy,1 ;为变量y分配1个存储单元 .def start ;定义标号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 ;将结果(A的低16位)送往变量y存储单元 init: STM#x, AR1 ; AR1指向x的首地址 RPT#4 ;重复执行下条指令5次 MVPDtable, *AR1+ ;重复传递共5个数据 RET ;子程序返回 .end ;源程序结束 第5章 汇编语言程 利用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,则TC=1,否则为0 BC loop, TC ;若AR1- AR0 0,则循环 若AR1=AR0,则顺序执行 第5章 汇编语言程 5.2堆栈栈的使用方法 pp 特点:特点: pp 1616位堆栈指针位堆栈指针SPSP pp 向堆栈中压入数据时,堆栈指针从高地址向低地址移动向堆栈中压入数据时,堆栈指针从高地址向低地址移动 pp 压入堆栈时,先压入堆栈时,先SP-1SP-1,再压入数据;弹出操作数时,先弹出,再压入数据;弹出操作数时,先弹出 数据,后数据,后SP+1SP+1 10 设置好堆栈后,就可以使用堆栈了,如:设置好堆栈后,就可以使用堆栈了,如: CALL pmad CALL pmad ;(SP)-1SP, (PC)+2TOS(SP)-1SP, (PC)+2TOS,pmadPCpmadPC RET RET ;(TOS)PC,(SP)+1SP (TOS)PC,(SP)+1SP 第5章 汇编语言程 5.3 加、减法和乘法运算 pp例例5-4 5-4 计算计算z=x+y-wz=x+y-w pp使用:使用:加法指令加法指令ADDADD,减法指令,减法指令SUBSUB 11 LD LD x, Ax, A ADD ADD y, Ay, A SUB SUB w, Aw, A STL STL A, zA, z ; ;取取x x值,值,A=xA=x ; ;完成完成x+yx+y运算,运算,A=x+yA=x+y ; ;完成完成x+y-wx+y-w运算,运算,A= x+y-wA= x+y-w ; ;计算结果(计算结果(A A的低的低1616位)存入位)存入 变量变量z z中中 第5章 汇编语言程 5.3 加、减法和乘法运算 pp例例5-5 5-5 计算计算y=mx+by=mx+b pp使用:使用:乘法指令乘法指令MPYMPY,加法指令,加法指令ADDADD 12 LD m, T LD m, T MPY x, A MPY x, A ADD b, A ADD b, A STL A, y STL A, y ; ;取系数取系数mm值,值,T=mT=m ; ;完成完成mxmx乘积,乘积,A=mxA=mx ; ;完成完成mx+bmx+b运算,运算,A=mx+bA=mx+b ; ;计算结果计算结果B B的低的低1616位存入位存入y y中中 第5章 汇编语言程 5.3 加、减法和乘法运算 pp例例5-6 5-6 计算计算y=xy=x 1 1 *a*a 1 1 +x+x 2 2 *a*a 2 2 pp使用:使用:乘法指令乘法指令MPY,MPY,乘法累加指令乘法累加指令MACMAC 13 LD x LD x 1 1 , T , T MPY a MPY a 1 1 , A , A LD x LD x 2 2 , T , T MAC a MAC a 2 2 , A , A STL A, y STL A, y STH A, y+1 STH A, y+1 ; ;取变量值取变量值x x 1 1 ,T=xT=x 1 1 ; ;完成乘法完成乘法x x 1 1a a1 1 运算,运算,A=xA=x 1 1a a1 1 ; ;取变量值取变量值x x 2 2 , T=xT=x 2 2 ; ;乘法累加,乘法累加,A=xA=x 1 1a a1 1 +x+x 2 2a a2 2 ; ;计算结果的低字计算结果的低字ALAL存入存入y y中中 ; ;计算结果的高字计算结果的高字AHAH存入存入y+1y+1中中 第5章 汇编语言程 5.3 加、减法和乘法运算 pp例例5-7 5-7 计算计算 pp使用:使用:乘法累加指令乘法累加指令MACMAC,重复执行下条指令,重复执行下条指令RPTRPT 14 第5章 汇编语言程 15 加法/减法 指定堆栈空间 为变量预留空间 初值序列 初始化变量 设置堆栈指针 利用MAC和RPT求乘累加和 第5章 汇编语言程 16 .title “Ex_543.asm“ ;为汇编语言源文件取名 .mmregs ;定义存储器映像寄存器 stack .usect“STACK“, 10H ;为堆栈空间分配16个存储单元 .bssa,4 ;为系数a分配4个存储单元 .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个数据 CALLSUM ;调用子程序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章 汇编语言程 【例5-8】在例5-7的4项乘积ai xi(i=1,2,3,4)中找出最 大值,并存放累加器A中。 程序: STM #a, AR1 STM #x, AR2 STM #2, AR3 LD *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 加、减法和乘法运算 第5章 汇编语言程 18 5.4 重复操作 例5-9 对一个数组进行初始化X5=0,0,0,0,0 第5章 汇编语言程 【例5-9】对对数组进组进 行初始化,使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+ 注意:注意: 对对x5x5中的中的5 5个元素置个元素置0 0,重复次数为,重复次数为4 4,即执行,即执行1 1 次次STL ASTL A,AR1+AR1+指令后,再重复执行指令后,再重复执行4 4次;次; RPTZRPTZ指令设定重复次数后,再对累加器清零。指令设定重复次数后,再对累加器清零。 5.4 重复操作 第5章 汇编语言程 20 块重复操作 例5-10 对数组X5中每个元素加1 第5章 汇编语言程 例5-10 对对数组组x5中的每一元素加1。 .bss x, 5 begin: LD #1,B STM #4,BRC STM #x,AR4 RPTB next-1 ADD *AR4,B,A STL A,*AR4+ next: LD #0,B ; ; 设置数组空间设置数组空间 ; ; 立即数立即数1 1送入送入B B ; ; 设置重复次数设置重复次数, ,BRC=BRC=4 4,循环循环5 5次次 ; ; 数组首地址数组首地址x x送入送入AR4AR4 ; ; 设置循环结束地址设置循环结束地址 ; ; 数组数据与数组数据与B B相加相加, ,结果存入结果存入A A中中 ; ; 存储数组结果,并修改地址存储数组结果,并修改地址 ; ; B B清清0 0 块重复操作 第5章 汇编语言程 22 5.5 数据块传送 数据传送指令的特点: 传送速度比加载和存储指令要快; 数据传送不通过累加器; 可寻址程序存储器; 与RPT结合,可实现数据块传送。 第5章 汇编语言程 23 5.5 数据块传送 第5章 汇编语言程 pp例例5-115-11数数组组组组X5=1,2,3,4,5X5=1,2,3,4,5初始化初始化(程序存(程序存储储储储器和数据存器和数据存 储储储储器之器之间间间间的数据的数据传传传传送)送) 24 .data TBL: .word 1,2,3,4,5 .bss x,5 .text START: STM #x,AR5 RPT #4 MVPD TBL,*AR5+ ; ;定义数据代码段定义数据代码段 ; ;为标号为标号TBLTBL开始的开始的5 5个存储单元赋初值个存储单元赋初值 ; ;为变量为变量x x分配分配5 5个存储单元个存储单元 ; ;定义文本代码段定义文本代码段 ; ;将变量将变量x x的首地址赋给的首地址赋给AR5AR5 ; ;将下条指令重复执行将下条指令重复执行5 5次次 ; ;将数据送入将数据送入X X对应地址单元中对应地址单元中 5.5 数据块传块传 送 第5章 汇编语言程 pp例例5-125-12编写一段程序将数据存储器中的数组编写一段程序将数据存储器中的数组x20x20复制复制 到数组到数组y20y20。(数据存储器和数据存储器之间的数据传送)(数据存储器和数据存储器之间的数据传送) 25 .bss x,20 .bss y,20 .text LD #x,AR2 LD #y,AR3 RPT #19 MVDD *AR2+,*AR3+ ; ;为变量为变量x x分配分配2020个存储单元个存储单元 ; ;为变量为变量y y分配分配2020个存储单元个存储单元 ; ;定义文本代码段定义文本代码段 ; ;将变量将变量x x的首地址赋给的首地址赋给AR2AR2 ; ;将变量将变量y y的首地址赋给的首地址赋给AR3AR3 ; ;将下条指令重复执行将下条指令重复执行2020次次 ; ;将(将(AR2AR2) (AR3AR3) 5.5 数据块传块传 送 第5章 汇编语言程 pp用双操作数指令编程的用双操作数指令编程的特点特点: 单周期内通过单周期内通过C C总线和总线和D D总线寻址两个数据总线寻址两个数据 用间接寻址方式获得操作数,且只能用用间接寻址方式获得操作数,且只能用AR2AR2AR5AR5 占用的程序空间小占用的程序空间小 运行的速度快运行的速度快 26 5.6 双操作数乘法 指令功能 MPY Xmem,Ymem,dst dst=Xmem*Ymem MAC Xmem,Ymem,scrdst dst=scr+Xmem*Ymem MAS Xmem,Ymem,scrdst dst=scr-Xmem*Ymem MACP Smem,Pmad,scrdst dst=scr+Smem*Pmad 表5-3 MAC型双操作数指令 寻寻址方式:*ARn、 *ARn+、 *ARn-、 *ARn+0% 第5章 汇编语言程 pp编制求解编制求解 的程序段。的程序段。 27 5.6 双操作数乘法 单操作数指令方案 双操作数指令方案 LD #0,B LD #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。 第5章 汇编语言程 pp进一步优化进一步优化 的程序段。的程序段。 pp 利用双操作数指令进行乘法累加运算,完成利用双操作数指令进行乘法累加运算,完成 N N 项乘积求和需项乘积求和需 2N 2N 个机器周期。如果将乘法累加器单元、多总线以及硬件循环个机器周期。如果将乘法累加器单元、多总线以及硬件循环 操作结合在一起,可以形成一个优化的乘法累加程序。完成一操作结合在一起,可以形成一个优化的乘法累加程序。完成一 个个 N N项乘积求和的操作,只需要项乘积求和的操作,只需要 N+2 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 第5章 汇编语言程 29 作业 pp1 1、编写、编写 的程序的程序, ,并注释 并注释 pp2 2、编写对数组、编写对数组X8=1,2,3,4,5,6,7,8X8=1,2,3,4,5,6,7,8的初的初 始化程序,并注始化程序,并注释释释释 第5章 汇编语言程 pp长字运算长字运算 pC54x可以利用长操作数可以利用长操作数(32(32位位) )进行长字运算。进行长字运算。 30 5.7 长长字运算和并行运算 长长字指令 DLD Lmem,dst DST src,Lmem DADD Lmem,src,dst DSUB Lmem,src,dst DRSUB Lmem,src,dst ;dst=Lmem 单周期 ;Lmem=src 双周期 ;dst=src+Lmem 单周期 ;dst=src-Lmem 单周期 ;dst=Lmem-src 单周期 第5章 汇编语言程 p长操作数在存储器的排列方法 p 偶地址排列法 指令中给出的地址为偶地址指令中给出的地址为偶地址 存储器中低地址存放高存储器中低地址存放高1616位位

温馨提示

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

评论

0/150

提交评论