收藏 分销(赏)

2022年'Cx的汇编语言程序设计.pptx

上传人:二*** 文档编号:12611128 上传时间:2025-11-10 格式:PPTX 页数:106 大小:883.32KB 下载积分:5 金币
下载 相关 举报
2022年'Cx的汇编语言程序设计.pptx_第1页
第1页 / 共106页
本文档共106页,全文阅读请下载到手机保存,查看更方便
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2012年10月22日1时35分,DSP原理及应用,#,2025/11/10 周一 17:08,1,第5章,TMS320C54x,汇编语言程序设计,内容提要,汇编语言程序设计是应用软件设计的基础,主要任务是利用汇编指令和伪指令编写源程序以完成指定的功能。,本章将结合例子介绍,TMS320C54x,汇编语言源程序设计的基本方法,涉及的内容包括:,汇编语言源程序的格式,常数、字符串、符号和表达式的规定,堆栈的使用方法,分支、调用、返回控制程序,加法、乘法、除法、长字和并行运算程序,单指令、块重复、循环嵌套等重复操作程序,数据块传送程序,小数运算程序和浮点运算程序,2025/11/10 周一 17:08,2,第5章,TMS320C54x,汇编语言程序设计,5.,1,概述,堆栈的使用方法,控制程序,算术运算程序,重复操作程序,数据块传送程序,小数运算,程序,2025/11/10 周一 17:08,3,第5章,TMS320C54x,汇编语言程序设计,5.1 概述,TMS320C54x,汇编语言源程序由源语句组成。这些语句可以包含汇编语言指令、汇编伪指令和注释。程序的编写必须符合一定的格式,以便汇编器将源文件转换成机器语言的目标文件。,本节将介绍汇编语言源程序的格式、各种常数、符号、字符串和表达式的规定。,2025/11/10 周一 17:08,4,第5章,TMS320C54x,汇编语言程序设计,5.1 概述,汇编语言程序以,.,asm,为扩展名,可以用任意的编辑器编写源文件。一条语句占源程序的一行,长度可以是源文件编辑器格式允许的长度,但汇编器每行最多读,200,个字符。因此,语句的执行部分必须限制在,200,个字符以内。,5,.,1,.,1,汇编语言源程序格式,2025/11/10 周一 17:08,5,第5章,TMS320C54x,汇编语言程序设计,1.,源文件格式,5,.,1,.,1,汇编语言源程序格式,助记符指令源语句的每一行通常包含,4,个部分:标号区、助记符区、操作数区和注释区。,标号,:,助记符,操作数,;注释,助记符指令语法格式:,【例】,助记符指令源语句举例。,NANHUA,.set,1,;,符号,NANHUA1,Begin:,LD,#NANHUA,AR1,;,将,1,加载到,AR1,标 号,助记符,操作数,注 释,2025/11/10 周一 17:08,6,第5章,TMS320C54x,汇编语言程序设计,1.,源文件格式,语句的书写规则:,所有语句必须以标号、空格、星号或分号,(*或;),开始;,标号是可选项,若使用标号,则标号必须从第一列开始;,所有包含有汇编伪指令的语句必须在一行完成指定;,各部分之间必须用空格分开,,Tab,字符与空格等效;,2025/11/10 周一 17:08,7,第5章,TMS320C54x,汇编语言程序设计,1.,源文件格式,语句的书写规则:,程序中注释是可选项。如果注释在第一列开始时,,,前面必须标上星号或分号,在其他列开始的注释前面必须以分号开头;,如果源程序很长,需要书写若干行,可以在前一行用反斜杠字符(,)结束,余下部分接着在下一行继续书写。,2025/11/10 周一 17:08,8,第5章,TMS320C54x,汇编语言程序设计,2.,标号,所有汇编指令和大多数汇编伪指令都可以选用标号,供本程序或其它程序调用。,标号必须从语句的第1列写起,其后的冒号“:”可任选;,标号为任选项,若不使用标号,则语句的第一列必须是空格、星号或分号;,标号是由字母、数字以及下划线和美元符号等组成,最多可达32个字符;,标号分大小写,且第一个字符不能是数字。,2025/11/10 周一 17:08,9,第5章,TMS320C54x,汇编语言程序设计,2.,标号,在使用标号时,标号的值是段程序计数器,SPC,的当前值。,例如,若使用,.,word,伪指令初始化几个字,则标号将指到第一个字。,【例5.1.2】,标号格式举例。,9,000000,10,000040,000,A,Start:,.,word 0Ah,3,7,000041,0003,000042,0007,;,假设汇编了某个其他代码,标号,值为40,h,2025/11/10 周一 17:08,10,第5章,TMS320C54x,汇编语言程序设计,3.,助记符,助记符,用来表示指令所完成的操作,,可以是汇编语言指令、汇编伪指令、宏伪指令。,助记符指令:,一般用大写,,不能从第一列开始,;,汇编伪指令:,用来为程序提供数据和控制汇编进程。以句号“.”开始,且用小写;,宏伪指令:,用来定义一段程序,以便宏调用来调用这段程序。以句号“,.,”开始,且用小写;,宏调用:,用来调用由宏伪指令定义的程序段。,2025/11/10 周一 17:08,11,第5章,TMS320C54x,汇编语言程序设计,4.,操作数,操作数是指,指令中参与操作的数值或汇编伪指令定义的内容,紧跟在助记符的后面,由一个或多个空格分开。,操作数之间必须用逗号“,”分隔;,操作数可以是常数、符号或表达式;,操作数中的常数、符号或表达式可用来作为地址、立即数或间接地址;,2025/11/10 周一 17:08,12,第5章,TMS320C54x,汇编语言程序设计,4.,操作数,(1),指令的操作数前缀,使用,“,#”,符号作为操作数的前缀;,使用,“,*,”,符号作为,操作数的,前缀,;,使用,“,”,符号作为,操作数的,前缀,。,汇编器允许指定的常数、符号或表达式作为地址、立即数或间接地址。,作为操作数的前缀有三种情况:,2025/11/10 周一 17:08,13,第5章,TMS320C54x,汇编语言程序设计,(1),指令的操作数前缀,用,“,#,”,作,前缀,例如:,Label,:,ADD,#,99,B,使用,“,#,”,号作为前缀,汇编器将操作数作为立即数处理。即使操作数是寄存器或地址,也将作为立即数。,如果操作数是地址,汇编器将把地址处理为一个数值,而不使用地址的内容。,操作数,#,99是一个立即数。,2025/11/10 周一 17:08,14,第5章,TMS320C54x,汇编语言程序设计,(1),指令的操作数前缀,用,“,*,”,作,前缀,例如:,Label,:,LD,*,AR3,B,使用,“,*,”,符号作为前缀,汇编器将操作数作为间接地址,即把操作数的内容作为地址。,操作数*,AR3,指定一个间接地址。该指令将引导汇编器找到寄存器,AR3,的内容作为地址,然后将该地址中的内容装入指定的累加器,B,中。,2025/11/10 周一 17:08,15,第5章,TMS320C54x,汇编语言程序设计,(1),指令的操作数前缀,用,“,”,作,前缀,例如:,Label,:,LD,x,A,使用,“,”,符号作为前缀,汇编器将操作数作为直接地址,即操作数由直接地址码赋值。,只要,DP=0,,将直接地址,x,中的内容装入指定的累加器,A,中。,2025/11/10 周一 17:08,16,第5章,TMS320C54x,汇编语言程序设计,5.,注释,用来说明指令功能的文字,便于用户阅读。,注释可,位于句首,或,句尾,,,位于句首时,,以,“,*,”或“,;,”开始,,位于句尾时,,以分号“;”开始。,注释可,单独一行或数行,;,注释是任选项。,11 00000 .,bss sym,;,保留空间于.,bss,*,*,改变段,允许第五个,mylab,定义 *,*,例如:,2025/11/10 周一 17:08,17,第5章,TMS320C54x,汇编语言程序设计,5,.,1,.,2,汇编语言中的常数与字符串,汇编器可支持7种类型的常数(常量)。,数据类型,举 例,说 明,二进制,1110001,b,或1110001,B,八进制,226,q,或572,Q,十进制,1234或+1234或-11234,缺省型,十六进制,0,A40h,或0,A40H,或0,xA40,浮点数,1.623,e-23,仅用于,C,语言,字符,D,字符串,“,this is a string”,2025/11/10 周一 17:08,18,第5章,TMS320C54x,汇编语言程序设计,5,.,1,.,3,汇编源程序中的符号,汇编程序中的符号用于标号、常数和替代字符。,由字母、数字以及下划线和美元符号(,A,Z,a,z,,0,9,,,_,和,$,)等组成;,符号名最多可长达,200,个字符;,在符号中,第1位不能是数字,并且符号中不能含空格。,2025/11/10 周一 17:08,19,第5章,TMS320C54x,汇编语言程序设计,5,.,1,.,3,汇编源程序中的符号,1.,标号,作为标号的符号代表在程序中对应位置的符号地址。,通常,标号是局部变量,在一个文件中局部使用的标号必须是唯一的。,助记符操作码和汇编伪指令名(不带前缀,“,.,”,)为有效标号。,标号分大小写。,例如:,ABC,Abc,abc,是,3,个不同的符号。,在调用汇编器时使用,-,c,选项,可以不分大小写。,2025/11/10 周一 17:08,20,第5章,TMS320C54x,汇编语言程序设计,1.,标号,标号还可以作为,.,global,,.,ref,,.,def,或,.,bss,等汇编伪指令的操作数。,如:,.,global,label,lable1,NOP,ADD,label,B,B,label1,2025/11/10 周一 17:08,21,第5章,TMS320C54x,汇编语言程序设计,5,.,1,.,4,汇编源程序中的表达式,表达式可以是常数、符号,或者是由算术运算符分开的一系列常数和符号。,有效表达式的值:32,768,32,767,影响表达式的主要因素:,圆括号,(),。圆括号内的表达式最先计算;,不能用大括号,或中括号,代替圆括号,(),。,优先级。,C54x,汇编器使用与,C,语言相似的优 先级,优先级高的先计算;,从左到右运算。具有相同的优先级,按从左 到右的顺序计算。,序号,符 号,运算操作,求值顺序,1,+-!,取正、取负、按位求补、逻辑负,从右至左,2,*,/%,乘法、除法、求模,从左至右,3,+-,加法、减法,从左至右,4,指数,从左到右,5,左移、右移,从左至右,6,=,大于、大于等于,从左至右,8,!=,不等于、等于,从左至右,9,&,按位与运算,从左至右,10,按位异或运算,从左至右,11,|,按位或运算,从左至右,2025/11/10 周一 17:08,22,第5章,TMS320C54x,汇编语言程序设计,5,.,1,.,4,汇编源程序中的表达式,1.,运算符,C54x,汇编器使用与,C,语言相似的优先级。,取正,(+),、负,(,),和乘,(,*,),比二进制形式有较高的优先级。,2.,条件表达式,汇编器支持关系运算符,可以用于任何表达式。,=,等于,=,等于 !,=,不等于,=,大于或等于,大于,0,且溢出,,;,则转至,zhong,否则往下执行,2025/11/10 周一 17:08,28,第5章,TMS320C54x,汇编语言程序设计,5,.,3,.,1,分支操作程序,与分支转移一样,通过传送控制到程序存储器的其他位置,子程序调用会中断连续的指令流。但是与分支转移不同的是,这种传送是临时的。,当函数的子程序被调用时,紧跟在调用后的下一条指令的地址保存在堆栈中。这个地址用于返回到调用程序并继续执行调用前的程序。,子程序调用操作分成两种形式:无条件调用和条件调用,两者都可以带延时操作和不带延时操作。,2.,子程序调用程序,2025/11/10 周一 17:08,29,第5章,TMS320C54x,汇编语言程序设计,2.,子程序调用程序,子程序调用指令,分 类,指 令,说 明,无条件,调用,CALLD,将返回的地址压入堆栈,并用该指令指定的地址加载,PC,CALAD,将返回的地址压入堆栈,用累加器,A,或,B,指定的地址加载,PC,条件,调用,CCD,如果满足指令给定条件,将返回的地址压入堆栈,并用该,指令指定的地址加载,PC,远程,调用,FCALL D,将,XPC,和,PC,压入堆栈,并用该指令指定的地址加载,PC,和,XPC,FCALA D,将,XPC,和,PC,压入堆栈,用累加器的低23位指定的地址加载,PC,和,XPC,2025/11/10 周一 17:08,30,第5章,TMS320C54x,汇编语言程序设计,2.,子程序调用程序,无条件调用是指无条件执行,调用。,条件调用和无条件调用操作相同,但是条件调用要在满足一个或多个条件时才执行,调用,。,远,程,调用允许对扩展存储器的子程序或函数进行调用。,2025/11/10 周一 17:08,31,第5章,TMS320C54x,汇编语言程序设计,2.,子程序调用程序,【例5.3.2】,子程序调用举例。,STM#123H,AR0,LD#456H,AR1,CALL new,LD AR1,16,A,new,:,MPY AR0,AR1,A,RET,;,将操作数,#123,H,装入,AR0,;,将操作数,#456,H,装入,AR1,;,调子程序,new,;,将,AR1,的内容左移,16,位后装入,A,;,AR0,与,AR1,的内容相乘,结果放入,A,中,;,子程序返回,2025/11/10 周一 17:08,32,第5章,TMS320C54x,汇编语言程序设计,5,.,3,.,1,分支操作程序,子程序返回程序可以使程序重新在被中断的连续指令处继续执行。,返回指令通过,将,弹出堆栈的值(包含将要执行的下一条指令的地址),,送,到程序计数器,PC,来实现返回功能。,C54x,可以执行无条件返回和条件返回,并且它们都可以带延时或不带延时,操作,。,3.,子程序返回程序,2025/11/10 周一 17:08,33,第5章,TMS320C54x,汇编语言程序设计,3.,子程序返回程序,子程序返回指令,分 类,指 令,说 明,无条件,返回,RETD,将堆栈顶部的返回地址加载到,PC。,RETED,将堆栈顶部的返回地址加载到,PC,,并使能可屏蔽中断。,RETFD,将,RTN,寄存器中的返回地址加载到,PC,,并使能可屏蔽中断。,条件,返回,RCD,如果满足指令给定条件,将堆栈顶部的返回地址加载到,PC。,远程,返回,FCALL D,将堆栈顶部的值弹出加载到,XPC,,将堆栈中下一个值弹出加载到,PC。,FCALA D,将堆栈顶部的值弹出加载到,XPC,,将堆栈中下一个值弹出加载到,PC,,并使能可屏蔽中断。,2025/11/10 周一 17:08,34,第5章,TMS320C54x,汇编语言程序设计,3.,子程序程序,无条件返回是无条件执行,返回操作,。,条件返回,可以给予被调用函数或中断服务程序(,ISR,),更多的返回,方式,,以便根据被处理的数据选择返回路径,,,通过使用条件返回指令,来实现返回,。,远,程,返回允许从扩展存储器的子程序或函数返回。,2025/11/10 周一 17:08,35,第5章,TMS320C54x,汇编语言程序设计,5,.,3,.,1,分支操作程序,C54x,的一些指令只有在满足一个或是多个条件后才被执行,,如条件分支转移、条件调用和条件返回等指令。,这些指令,都用条件来限制分支转移、调用和返回操作。这些条件可用条件算符来表示。,4.,条件操作程序,2025/11/10 周一 17:08,36,第5章,TMS320C54x,汇编语言程序设计,4.,条件操作程序,条 件 算 符,操作符号,条 件,说,明,操作符号,条 件,说,明,AEQ,A=0,累加器,A,等于,0,AOV,AOV=1,累加器,A,溢出,BEQ,B=0,累加器,B,等于,0,BOV,BOV=1,累加器,B,溢出,ANEQ,A,0,累加器,A,不等于,0,ANOV,AOV=0,累加器,A,不溢出,BNEQ,B,0,累加器,B,不等于,0,BNOV,BOV=0,累加器,B,不溢出,ALT,A0,累加器,A,小于,0,C,C=1,ALU,进位位置,1,BLT,B0,累加器,A,大于,0,BIO,BIO,低,BIO,信号电平为低,BGT,B0,累加器,B,大于,0,NBIO,BIO,高,BIO,信号电平为高,AGEQ,A,0,累加器,A,大于等于,0,UNC,无,无条件操作,BGEQ,B,0,累加器,B,大于等于,0,2025/11/10 周一 17:08,37,第5章,TMS320C54x,汇编语言程序设计,4.,条件操作程序,在,条件操作时也可以要求,有,多个条件,只有所有条件满足时才被认为是满足条件。,这种多个条件的组合就构成了指令的多重条件。,多重条件算符,第,1,组,第,2,组,A,类,B,类,A,类,B,类,C,类,EQ,NEQ,LEQ GEQ,LT,GT,OV,NOV,TC,NTC,C,NC,BIO,NBIO,2025/11/10 周一 17:08,38,第5章,TMS320C54x,汇编语言程序设计,4.,条件操作程序,选用,多重,条件时应当注意以下几点:,第,1,组:分为两类,最多可选择两个条件,,组内两类条件可以与/或构成多重条件,但不能用组内同类条件构成,与/或,多重条件。,组与组之间可用或构成多重条件。,当选择两个条件时,累加器必须是同一个。,例如,可以同时选择,AGT,和,AOV,,但不能同时选择,AGT,和,BOV,。,第,2,组:分为三类,,最多可选三个条件,,可以在每类中各选一个条件进行与/或构成多重条件,但不能在同类选两个以上条件。,例如,可以同时测试,TC、C,和,BIO,,但不能同时测试,NTC、C,和,NC。,2025/11/10 周一 17:08,39,第5章,TMS320C54x,汇编语言程序设计,4.,条件操作程序,【,例5.3.3】,条件,操作程序,。,BC sub,,,BLEQ,;,条件分支转移,若累加器,B0,,则转至,sub,,否则,往下执行,CC start,,,AGEQ,,,AOV,;,条件调用,若累加器,A0,且溢出,,,则调用,start,,否则往下执行,RC NTC,;,条件返回,若,TC=0,,,则返回,否则往下执行,2025/11/10 周一 17:08,40,第5章,TMS320C54x,汇编语言程序设计,4.,条件操作程序,注意:,若需要多个条件相与时,用单条指令表示。,如:,BC new,AGT,AOV,转移条件:,AGT,和,AOV,的与逻辑,若需要两个条件相或时,需用两条指令分别表示。,如:,若累加器,A,大于0或溢出,则转移至,sub,转移条件:,AGT,和,AOV,的或逻辑,BC sub,AGT,BC sub,AOV,2025/11/10 周一 17:08,41,第5章,TMS320C54x,汇编语言程序设计,5,.,3,.,1,分支操作程序,5.,比较转移程序,利用比较指令,CMPR,可实现比较转移操作。,比较操作指令:,CMPR,测试条件,辅助寄存器,ARx,指令功能:,辅助寄存器,ARx,与,AR0,进行比较,,若比较结果使所给定的测试条件成立,则,TC,位置1。,实现方法:,通过,CMPR,的比较结果得,TC,值;,根据,TC,值,由条件转移指令实现分支转移。,2025/11/10 周一 17:08,42,第5章,TMS320C54x,汇编语言程序设计,5.,比较转移程序,例如:,比较操作后条件分支转移,STM#5,AR1,;,AR1=5,STM,#10,AR0,;,AR0=10,loop:,*,AR1+,;,AR1=AR1+1,CMPR LT,AR1,;,若,AR1-AR0,0,,则,TC=1,,否则为,0,BC loop,TC,;,若,AR1-AR0,0,,则循环,若,AR1=AR0,,则顺序执行,2025/11/10 周一 17:08,43,第5章,TMS320C54x,汇编语言程序设计,控制程序,5,.,3,.,2,循环操作程序,在程序设计时,经常需要重复执行某一段程序。利用,BANZ,(,当辅助寄存器不为0时转移)指令,可实现,循环计数和操作。,循环操作指令:,BANZ,转移地址,辅助寄存器,指令功能:,当辅助寄存器不为0时,则转至转移地址,否则顺序执行。,2025/11/10 周一 17:08,44,第5章,TMS320C54x,汇编语言程序设计,5,.,3,.,2,循环操作程序,【例5.3.4】,.bss x,10,;,给,x,保留10个空间,.bss y,1,;,给,y,保留1个空间,STM#x,AR1,;,设置数据段的首地址,STM,#9,AR2,;,设置循环计数值,LD#0,A,;,累加器清0,loop:,ADD *AR1+,A,;,累加运算,并修改地址,BANZ loop,*AR2-,;,若计数值不为0,则循环,并计数值减1,若计数值为0,则结束循环,STL A,y,;,累加和存入,y,中,用,AR2,作为循环计数器,由,BANZ,实现程序的循环控制。,注意:,BANZ loop,*AR2-;,先判断,再修正,AR2=AR2-1,2025/11/10 周一 17:08,45,第5章,TMS320C54x,汇编语言程序设计,算术运算程序,基本算术运算包括:,加减法和乘法运算,除法运算,长字和并行运算,2025/11/10 周一 17:08,46,第5章,TMS320C54x,汇编语言程序设计,算术运算程序,5,.,4,.,1,加、减法和乘法运算,在数字信号处理中,加法和乘法运算是最常见的算术运算。,【,例5.4.1】,计算,y,=,a,x,+,b,程序:,LD a,T,;,取,a,值,,,T=a,MPY x,B,;,完成,ax,乘积,,,B=ax,ADD b,B,;,完成,ax+b,运算,,,B=ax+b,STL B,y,;,计算结果存入,y,中,2025/11/10 周一 17:08,47,第5章,TMS320C54x,汇编语言程序设计,5,.,4,.,1,加、减法和乘法运算,【,例5.4.2】,计算,y,=,xl,al,+,x2,a2,程序:,LD x1,T,MPY a1,B,LD x2,T,MAC a2,B,STL B,y,STH B,y+1,;,T=x1,;,B=x1a1,;,T=x2,;,乘法累加,,,B=x1a1+x2a2,;,计算结果的低字,BL,存入,y,中,;,计算结果的高字,BH,存入,y+1,中,2025/11/10 周一 17:08,48,第5章,TMS320C54x,汇编语言程序设计,5,.,4,.,1,加、减法和乘法运算,【,例5.4.3】,计算,y=,程序:,*,*example.asm *,*,.title,“”,.mmregs,stack .usect,“,STACK,”,10h,.,bss a,4,.,bss x,4,.bss y,1,.def start,.,data,;,为堆栈指定空间,;,为变量分配9个字的空间,2025/11/10 周一 17:08,49,第5章,TMS320C54x,汇编语言程序设计,5,.,4,.,1,加、减法和乘法运算,【,例5.4.3】,计算,y=,程序:,table:,.word 1,2,3,4,.,word 8,6,4,2,.text,start:STM#0,SWWSR,STM#STACK+10h,SP,STM#a,AR1,RPT#7,MVPD table,*AR1+,CALL SUM,end,:,B end,;,变量初始化,;,插入0个等待状态,;,设置堆栈指针,;,AR1,指向,a,;,移动8个数据,;,从程序存储器到数据存储器,;,调用,SUM,子程序,2025/11/10 周一 17:08,51,第5章,TMS320C54x,汇编语言程序设计,5,.,4,.,1,加、减法和乘法运算,【,例5.4.4】,求4项乘积,a,i,x,i,(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-,;,ai,首地址,a,给,AR1,;,xi,首地址,x,给,AR2,;,设置计数器,AR3=2,;,取系数,T=ai,并修改,AR1,;,乘法运算,A=,a,i,x,i,并修改,AR2,;,取系数,T=ai,并修改,AR1,;,乘法运算,B=,a,i,x,i,并修改,AR2,;,求,A,和,B,中的最大值,;,若,AR30,则循环,并修改,AR3,若,AR3=0,,则不循环,2025/11/10 周一 17:08,52,第5章,TMS320C54x,汇编语言程序设计,算术运算程序,5,.,4,.,2,除法运算,在,C54x,中没有除法器硬件,也没有专门的除法指令。但是,利用条件减法指令(,SUBC),和,重复指令(,RPT),可实现两个无符号数的除法运算,。,条件减法指令:,SUBC Smem,src,功能:,(,src)-(Smem),15ALU,输出端,若,ALU,输出,0,,则(,ALU,输出),1+1,src,否则(,src,),1src,重复指令:,RPT#K,功能:,RC=#K,重复执行下条指令,K,+1,次。,2025/11/10 周一 17:08,53,第5章,TMS320C54x,汇编语言程序设计,5,.,4,.,2,除法运算,1.,|,被除数|,|除数|,例:编写0.4(-0.8)的程序,数据存储器,.,bss num,1,num,分子,.,bss den,1,den,分母,.,bss quot,1,quot,商,:,:,.,data,table,.word 4*32768/10,.word -8*32768/10,table,0.4,-0.8,.,text,start:STM#num,AR1,AR1,num,RPT#1,MVPD table,*AR1+,0.4,-0.8,quot,2025/11/10 周一 17:08,54,第5章,TMS320C54x,汇编语言程序设计,5,.,4,.,2,除法运算,1.,|,被除数|,|除数|,例:编写0.4(-0.8)的程序,0.4,:,:,-0.8,商,-0.8,0.4,数据存储器,num,den,quot,table,AR1,quot,LD den,16,A,;,分母送,AH,MPYA num,;,商符号送,B,(,num)AH B,即分子分母,B,,取符号。,ABS A,;,取分母绝对值,STH A,den,0.8,LD num,16,A,;,分子送,AH,ABS A,;,取分子绝对值,RPT#14,SUBC den,A,;15,次减法循环,完成除法,XC 1,BLT,;,若,B0,则变号,NEG A,STL A,quot,;,保存商,-0.5,2025/11/10 周一 17:08,55,第5章,TMS320C54x,汇编语言程序设计,5,.,4,.,2,除法运算,1.,|,被除数|,|除数|,例:编写16384512的程序,.,bss num,1,.,bss den,1,.,bss quot,1,.,data,table,.word 16,384,.word 512,.text,start:STM#num,AR1,RPT#1,MVPD table,*AR1+,;,16,384,;,512,;,传送2个数据至分子、分母单元,2025/11/10 周一 17:08,57,第5章,TMS320C54x,汇编语言程序设计,5,.,4,.,2,除法运算,2.,|,被除数|,|除数|,例:编写16384512的程序,LD den,16,A,MPYA num,ABS A,STH A,den,LD num,A,ABS A,RPT#15,SUBC den,A,XC 1,BLT,NEG A,STL A,quot,;,将分母移到累加器,A,(31,16),;,(num),*,A(32,16),B,获取商的符号,;,分母取绝对值,;,分母绝对值存回原处,;,分子,A,(32,16),;,分子取绝对值,;16,次减法重复操作,完成除法,;,如果,B,|除数|,例:编写16384512的程序,运行结果:,被除数,除 数,商(十六进制),商(十进制),16,384,512,0,xC020,32,66*32,768/100(0.66),-33*32,768/100(-0.33),0,xFFFE,-2,注意:,SUBC,指令仅对无符号数进行操作,因此先对被除数和除数取绝对值,然后利用乘法操作获取商的符号,最后通过条件操作指令给商加上适当的符号。,2025/11/10 周一 17:08,59,第5章,TMS320C54x,汇编语言程序设计,算术运算程序,5,.,4,.,3,长字运算和并行运算,长字指令:,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,单周期,C54x,可以利用32位长操作数进行长字运算。,2025/11/10 周一 17:08,60,第5章,TMS320C54x,汇编语言程序设计,长字的排列方式,偶地址排列,奇地址排列,(1),偶地址排列,如:,DLD *AR3+,A,执行前:,A,00,0000,0000,AR3,0100,数据存储器,0100,h,6,C,A,C,0101,h,B,D,9,0,高字,低字,执行后:,A,00,0000,0000,AR3,0100,6,CAC,0101,BD90,0102,指令中给出的地址为偶地址,则存储器低地址存放高,16,位操作数。,2025/11/10 周一 17:08,61,第5章,TMS320C54x,汇编语言程序设计,(1),偶地址排列,【例5.4.5】,偶地址排列法举例。,.,bss a,2,.bss y,2,.,data,table:.word 06CACH,0BD90H,.text,STM#a,AR1,RPT#1,MVPD table,*AR1+,STM#a,AR3,DLD,*,AR3,+,,A,执行前:,A,=,00,0000,0000h,AR3,=,0100h,(0100,h),=,6CACh(,高字),(0101,h),=,BD90h(,低字),执行,后,:,A,=,00,6CAC,BD90h,AR3,=,0102h,(0100,h),=,6,CACh,(0101,h),=,BD90h,2025/11/10 周一 17:08,62,第5章,TMS320C54x,汇编语言程序设计,(2),奇地址排列,如:,DLD *AR3+,A,执行前,:,A,00,0000,0000,AR3,0101,数据存储器,0100,h,6,C,A,C,0101,h,B,D,9,0,低字,高字,执行后,:,A,00,0000,0000,BD90,6CAC,AR3,0101,0102,0103,指令中给出的地址为奇地址,则存储器低地址存放低,16,位操作数。,2025/11/10 周一 17:08,63,第5章,TMS320C54x,汇编语言程序设计,(2),奇地址排列,【例5.4.6】,奇地址排列法举例。,.,bss a,2,.bss y,2,.,data,table:.word 06CACH,0BD90H,.text,STM#a,AR1,RPT#1,MVPD table,*AR1-,STM#a,AR3,DLD,*,AR3,+,,A,执行前:,A,=,00,0000,0000h,AR3,=,0101h,(0100,h),=,6CACh(,低字),(0101,h),=,BD90h(,高字),执行,后,:,A,=,00,BD90,6CAC,h,AR3,=,0103h,(0100,h),=,6,CACh,(0101,h),=,BD90h,2025/11/10 周一 17:08,64,第5章,TMS320C54x,汇编语言程序设计,【例5.4.7】,计算,Z,32,=,X,32,+,Y,32,。,标准运算,.,bss xhi,1,.,bss xlo,1,.,bss yhi,1,.,bss ylo,1,.,bss zhi,1,.,bss zlo,1,数据,存储器,xhi,X,31,X,16,xlo,X,15,X,0,yhi,Y,31,Y,16,ylo,Y,15,Y,0,zhi,zlo,LD xhi,16,A,ADDS xlo,A,ADD yhi,16,A,ADDS ylo,A,STH A,zhi,STL A,zlo,AG,AH,AL,LD xhi,16,A,X,31,X,16,0,0,0,0,X,31,X,16,0,0,0,0,ADDS xlo,A,+,X,15,X,0,X,31,X,16,X,15,X,0,X,15,X,0,ADD yhi,16,A,+,Y,31,Y,16,0,0,0,0,Z,31,Z,16,X,15,X,0,Z,31,Z,16,X,15,X,0,ADDS ylo,A,+,Y,15,Y,0,Z,31,Z,16,Z,15,Z,0,Z,15,Z,0,STH A,zhi,Z,31,Z,16,STL A,zlo,Z,15,Z,0,6字,6,T,2025/11/10 周一 17:08,65,第5章,TMS320C54x,汇编语言程序设计,【例5.4.7】,计算,Z,32,=,X,32,+,Y,32,。,标准运算,数据,存储器,xhi,X,31,X,16,X,15,X,0,yhi,Y,31,Y,16,Y,15,Y,0,zhi,LD xhi,16,A,ADDS xlo,A,ADD yhi,16,A,ADDS ylo,A,STH A,zhi,STL A,zlo,6字,6,T,长字运算,.,bss xhi,2,1,1,.,bss yhi,2,1,1,.bss zhi,2,1,1,DLD xhi,A,DADD yhi,A,DST A,zhi,AG,AH,AL,DLD xhi,A,X,31,X,16,X,15,X,0,X,31,X,16,X,15,X,0,DADD yhi,A,+,Y,31,Y,16,Y,15,Y,0,Z,31,Z,16,Z,15,Z,0,Z,31,Z,16,Z,15,Z,0,DST A,zhi,Z,31,Z,16,Z,15,Z,0,3字,3,T,2025/11/10 周一 17:08,66,第5章,TMS320C54x,汇编语言程序设计,5,.,4,.,3,长字运算和并行运算,2.,并行运算,并行运算就是,同时利用,D,总线和,E,总线,通过并行指令来实现数据的加载和算术运算。,D,总线用来执行加载或算术运算。,E,总线用来存放先前的结果。,并行指令:,并行加载和乘法指令,并行加载和存储指令,并行存储和乘法指令,并行存储和加/减指令,2025/11/10 周一 17:08,67,第5章,TMS320C54x,汇编语言程序设计,2.,并行运算,LD|MACR,LD|MASR,例如:,LD Xmem,dst1|MACR Ymem,dst2,功能:,dst1=Xmem(16-ASM);,dst=Xmem(16-ASM);,dst=dst+T*Xmem。,并行存储和乘法指令:,2025/11/10 周一 17:08,70,第5章,TMS320C54x,汇编语言程序设计,2.,并行运算,ST|ADD,ST|SUB,例如:,ST src,Ymem|ADD Xmem,dst,功能:,Ymem=src(16-ASM);,dst=dst+Xmem。,并行存储和加/减指令:,2025/11/10 周一 17:08,71,第5章,TMS320C54x,汇编语言程
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 初中其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服