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

下载本文档

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

文档简介

1、第五章第五章 汇编语言程序设计汇编语言程序设计 概述概述 程序的控制与转移程序的控制与转移(重点)(重点) 堆栈的使用方法堆栈的使用方法 加、减法和乘法运算加、减法和乘法运算(重点)(重点) 重复操作重复操作(重点)(重点) 数据块传送数据块传送(重点)(重点) 双操作数乘法双操作数乘法 长字运算和并行运算长字运算和并行运算 第第5章章 汇编语言程汇编语言程 2 概述 标号标号:助记符助记符操作数操作数;注释;注释 用空格或用空格或 T 隔开隔开 p书写格式规则详见书写格式规则详见P140 汇编语言程序以汇编语言程序以.asm为扩展名。一条语句占源为扩展名。一条语句占源 程序的一行,汇编器每行

2、最多读程序的一行,汇编器每行最多读200个字符。因此个字符。因此 ,语句的执行部分必须限制在,语句的执行部分必须限制在200个字符以内。个字符以内。 第第5章章 汇编语言程汇编语言程 3 分分 类类 指指 令令 说说 明明 无条件无条件 分支转移分支转移 BD 用该指令指定的地址加载用该指令指定的地址加载PC PC BACCD 用累加器的低用累加器的低1616位指定的地址加载位指定的地址加载PC PC 条件条件 分支转移分支转移 BCD 若满足指令给定条件,用该指令指定的地若满足指令给定条件,用该指令指定的地 址加载址加载PC PC 5.1程序的控制与转移程序的控制与转移 第第5章章 汇编语言

3、程汇编语言程 4 分分 类类 指指 令令 说说 明明 无条件无条件 调用调用 CALLD 将返回的地址压入堆栈,并用该指令指定的地址加将返回的地址压入堆栈,并用该指令指定的地址加 载载PC CALAD 将返回的地址压入堆栈,用累加器将返回的地址压入堆栈,用累加器A或或B指定的地址指定的地址 加载加载PC 条件调条件调 用用 CCD 如果满足指令给定条件,将返回的地址压入堆栈,如果满足指令给定条件,将返回的地址压入堆栈, 并用该指令指定的地址加载并用该指令指定的地址加载PC 分分 类类 指指 令令 说说 明明 无条件返回无条件返回 RETD 将堆栈顶部的返回地址加载到将堆栈顶部的返回地址加载到P

4、C。 条件返回条件返回 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=

5、0 累加器累加器B不溢出不溢出 ALTA0累加器累加器A小于小于0 CC=1ALU进位位置进位位置1 BLTB0累加器累加器A大于大于0 BIO 低低 信号电平为低信号电平为低 BGTB0累加器累加器B大于大于0 NBIO 高高 信号电平为高信号电平为高 AGEQA0累加器累加器A大于等于大于等于0 UNC无无无条件操作无条件操作 BGEQB0累加器累加器B大于等于大于等于0 BIO BIO BIO BIO 5.1程序的控制与转移程序的控制与转移 第第5章章 汇编语言程汇编语言程 6 第第1组组第第2组组 A类类B类类A类类B类类C类类 EQ,NEQ,LT LEQ,GT,GEQ OV NOV

6、TC NTC C NC BIO NBIO 5.1程序的控制与转移程序的控制与转移 第第5章章 汇编语言程汇编语言程 7 例例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

7、中两个条件相中两个条件相“或或”怎么办?怎么办? 第第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转移,重复执行转移,

8、重复执行5次次 STLA,y ;将结果(将结果(A的低的低16位)送往变量位)送往变量y存储单元存储单元 .title Ex534.asm ;为汇编语言源文件取名为汇编语言源文件取名 .mmregs ;定义存储器映像寄存器定义存储器映像寄存器 stack.usectSTACK, 10h ;为堆栈空间分配为堆栈空间分配16个存储单元个存储单元 .bssx, 5 ;为变量为变量x分配分配5个存储单元个存储单元 .bssy,1 ;为变量为变量y分配分配1个存储单元个存储单元 .def start ;定义标号定义标号start .data ;定义数据代码定义数据代码 table: .word1,2,3

9、,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中中 BAN

10、Zloop, *AR2- ; AR2不为不为0转移,重复执行转移,重复执行5次次 STLA,y ;将结果(将结果(A的低的低16位)送往变量位)送往变量y存储单元存储单元 init: STM#x, AR1 ; AR1指向指向x的首地址的首地址 RPT#4 ;重复执行下条指令重复执行下条指令5次次 MVPDtable, *AR1+ ;重复传重复传递递共共5个数据个数据 RET ;子程序返回子程序返回 .end ;源程序结束源程序结束 第第5章章 汇编语言程汇编语言程 9 利用利用CMPR指令进行比较操作指令进行比较操作 指定的指定的ARx寄存器(寄存器(x=17)与)与AR0比较,测试条件成立比

11、较,测试条件成立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章章 汇编语言程汇编语言程 10 5.2堆栈的使用方法堆栈的使用方法 第第5章章 汇编语言程汇编语言程 11 5.3 加、减法

12、和乘法运算加、减法和乘法运算 第第5章章 汇编语言程汇编语言程 12 5.3 加、减法和乘法运算加、减法和乘法运算 第第5章章 汇编语言程汇编语言程 13 5.3 加、减法和乘法运算加、减法和乘法运算 第第5章章 汇编语言程汇编语言程 14 5.3 加、减法和乘法运算加、减法和乘法运算 第第5章章 汇编语言程汇编语言程 15 加法/减法 指定堆栈空间指定堆栈空间 为变量预留空间为变量预留空间 初值序列初值序列 初始化变量初始化变量 设置堆栈指针设置堆栈指针 利用利用MAC和和RPT求乘累加和求乘累加和 第第5章章 汇编语言程汇编语言程 16 .title Ex_543.asm“ ;为汇编语言源

13、文件取名为汇编语言源文件取名 .mmregs ;定义存储器映像寄存器定义存储器映像寄存器 stack .usectSTACK, 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个存储单元赋值个

14、存储单元赋值 .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的首地址的首地址

15、赋给赋给AR3 STM#x, AR4 ;将变量将变量x的首地址的首地址赋给赋给AR4 RPTZA, #3 ;将累加器清将累加器清0,重复执行下条指令,重复执行下条指令4次次 MAC*AR3+, *AR4+, A;执行乘法累加运算,结果存入累计器执行乘法累加运算,结果存入累计器A中中 STLA, y ;将结果(将结果(A的低的低16位)送往变量位)送往变量y存储单元存储单元 RET ;子程序返回子程序返回 .end ;源程序结束源程序结束 第第5章章 汇编语言程汇编语言程 17 【例例5 5-8-8】在例】在例5-75-7的的4 4项乘积项乘积a ai i x xi i(i=1,2,3,4)(i

16、=1,2,3,4)中找出最中找出最 大值,并存放累加器大值,并存放累加器A 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 a的首地址赋给的首地址赋给AR1AR1 ; ;变量变量x x的首地址赋给的首地址赋给AR2AR2 ; ;设置计数器设置计数器AR3=2AR3=2 ; ;取系数取系数T=aT=a1 1, ,并修改并修改AR1AR1 ; ;乘法运算乘法运算A=aA=a1 1x

17、 x1 1, ,并修改并修改AR2AR2 ; ;取系数取系数T=ai,T=ai,并修改并修改AR1AR1 ; ;乘法运算乘法运算B=aB=ai ix xi i, ,并修改并修改AR2AR2 ; ;求求A A和和B B中的最大值中的最大值 ,结果存入,结果存入A A ; ;若若AR30,AR30,则循环则循环, ,并修改并修改AR3AR3 若 若AR3=0AR3=0,则顺序执行则顺序执行 5.3 加、减法和乘法运算加、减法和乘法运算 第第5章章 汇编语言程汇编语言程 18 5.4 重复操作重复操作 例例5-9 对一个数组进行初始化对一个数组进行初始化X5=0,0,0,0,0 第第5章章 汇编语言

18、程汇编语言程 19 【例例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+ 5.4 重复操作重复操作 第第5章章 汇编语言程汇编语言程 20 块重复操作 例例5-10 对数组对数组X5中每个元素加中每个元素加1 第第5章章 汇编语言程汇编语言程 21 例例5 5-10 -10 对数组对数组x5x5中的每一元素加中的每一元素加1 1。 .bss x, 5 begin: LD #1

19、,B STM #4,BRC STM #x,AR4 RPTB next-1 ADD *AR4,B,A STL A,*AR4+ next: LD #0,B 块重复操作 第第5章章 汇编语言程汇编语言程 22 5.5 数据块传送数据块传送 数据传送指令的特点数据传送指令的特点: : 传送速度比加载和存储指令要快;传送速度比加载和存储指令要快; 数据传送不通过累加器;数据传送不通过累加器; 可寻址程序存储器;可寻址程序存储器; 与与RPTRPT结合,可实现数据块传送。结合,可实现数据块传送。 第第5章章 汇编语言程汇编语言程 23 5.5 数据块传送数据块传送 第第5章章 汇编语言程汇编语言程 24

20、.data TBL: .word 1,2,3,4,5 .bss x,5 .text START: STM #x,AR5 RPT #4 MVPD TBL,*AR5+ 5.5 数据块传送数据块传送 第第5章章 汇编语言程汇编语言程 25 .bss x,20 .bss y,20 .text LD #x,AR2 LD #y,AR3 RPT #19 MVDD *AR2+,*AR3+ . 5.5 数据块传送数据块传送 第第5章章 汇编语言程汇编语言程 26 5.6 双操作数乘法双操作数乘法 指令指令功能功能 MPY Xmem,Ymem,dst dst=Xmem*Ymem MAC Xmem,Ymem,scr

21、dst 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章章 汇编语言程汇编语言程 27 5.6 双操作数乘法双操作数乘法 单操作数指令方案单操作数指令方案 双操作数指令方案双操作数指令方案 LD #0,B LD #0,B STM #a,AR2 STM #a,AR2 STM #x,AR3 STM #x,AR3 STM #1

22、9,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章章 汇编语言程汇编语言程 28 5.6 双操作数乘法双操作数乘法 STM #x,AR2 STM #a,AR3 RPTZ A, #19 ;2 个机器周期个机器周期 MAC *AR2+,*AR3+,A ;1 个机器

23、周期个机器周期 STH A,y STL A,y+1 第第5章章 汇编语言程汇编语言程 29 作业 第第5章章 汇编语言程汇编语言程 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章章 汇编语言程汇编语言程 31 5.7 长字运算和并行运算长字运算和并行运算 第第5章章 汇编语言程汇编语言程 32 5.7 长字运算和并行运算长字运算和并行运算 偶地址排列法举例偶地址排列法举例 DLD *AR3+, A 执行前:执行前: 执行后:执行后: A=00 0000 0000 A=00 6CAC BD90 AR3=0100 AR3=0102 (0100h)=6CAC(高字)(高字) (0100h)=6CAC (0101h)=BD90(低字)(低字) (0101h)=BD90 奇地址排列法举例奇地址排列法举例 DLD *AR3+, A 执行前:执行前: 执行后:执

温馨提示

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

评论

0/150

提交评论