第六章 语言程序设计课题.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 汇编语言程序设计 (6学时) 主要内容 汇编格式、寻址方式、指令系统 汇编程序文件结构 汇编程序编写 6.1汇编语言描述概述 6.1.1汇编语言常量 整数常量 浮点数常量 字符常量 汇编时常量 6.1.2汇编语言中的符号 C54x DSP中的符号最多可以是32位符号串(符号由A~Z、a~z、0~9、_和$组成)。一个有效符号的第一位不能是数字,字符之间不能有空格。符号一般区分大小写,但在汇编器中选用-C选项就可以使汇编器不区分符号的大小写。 6.1.3汇编语言中的表达式 6.1.4汇编语言程序格式 汇编语言格式一般分4个部分:标号、指令、操作数、注释。具体如下: 标号: 指令 操作数列表 ;注释 标号 标号可用来提供程序其他部分的调用,或者是用于程序的划分、便于程序员理解或设计程序 指令 指令不能从第一列开始,一旦从第一列开始,它会被认为是标号 助记符指令(如STM、MAC、STL等) 伪指令(如.data,.list等) 宏指令(如.macro等) 宏调用 操作数 操作数可以是常量、符号、或常量和符号的混合表达。操作数之间用逗号隔开。操作数使用前缀来指定操作数是地址还是数字。 前缀# ADD #11,A ;#11为立即数 立即数符号#一般用在汇编语言指令中,也可以用在伪指令中。如果在伪指令中使用立即数,可以不用#号。如: .byte 11 ;11为立即数,用来初始化一个字节 前缀* LD *AR0,A ;AR0为间接地址,表示把以AR0里的值为地址所指定的内容送入A。 前缀@ 指定后面的操作数是采用直接寻址或绝对寻址的地址。直接寻址产生的地址是@后操作数和数据页指针或堆栈指针的组合。 注释 注释是在一行中用“;”或“*”指定后面的内容不参加编译。 6.1.5汇编语言指令寻址方式 C54x共有7中种数据寻址方式: 立即寻址 绝对寻址 累加器寻址 直接寻址 间接寻址 存储器映射寄存器寻址 堆栈寻址。 立即寻址 立即寻址就是在指令中已经包含有执行指令所需要的操作数。在立即寻址中,数字前面加#,表示一个立即数。如: LD #60,A ;立即数60送入A 绝对寻址 绝对寻址就是在指令中包含要寻址存储单元的16位地址。在绝对寻址中,一般用*来表示后面的是地址。如: MVKD DATA,*AR0 ;将数据存储器DATA里的数据送入AR0的值为地址所指向的数据存储器单元中 累加器寻址 累加器寻址是用累加器中的数作为地址来读写程序存储器的。仅有2条指令READA、WRITA可采用累加器寻址 直接寻址 直接寻址就是在指令中包含有数据存储器地址的低7位,这7位是作为偏移地址值与基地址值(由数据页指针DP或堆栈指针SP决定)一起构成16位数据存储器地址。 具体使用DP还是SP作为基指由状态寄存器ST1中的编译方式位CPL来决定。若CPL=0,则9位DP值和指令中的7位地址组成16位数据存储器地址(DP值在高位,指令中的地址在低位);若CPL=1,则将16位堆栈指针SP值和7位地址值相加形成16位数据存储器地址。 例如下列程序段将3页的30H单元的内容送入累加器A的高16位 RSBX CPL ;CPL=0 LD #3,DP ;DP指向3页 LD 30H,16,A ;将3页的30H单元的内容送入累加器A的高16位 间接寻址 间接寻址是按辅助寄存器的内容寻址数据存储器。间接寻址有两种方式:单操作数寻址和双操作数寻址 双操作数寻址用在完成两个读或一个读一个写的指令中。这些指令只有一个字长,只能以间接寻址的方式工作 单操作数寻址 :单操作数寻址是一条指令中只有一个存储器操作数 LD *AR1+,A 循环寻址方法 LD *+AR2(9)%,A STL A,*+AR2(9)% 循环寻址的主要参数包括 长度计数器BK:定义循环缓冲区的大小R() 有效基地址EFB:定义缓冲区的起始地址,即ARx低N位设为0后的值 尾地址EOB:定义缓冲区的尾部地址 缓冲区索引index:当前ARx的低N位 步长Step:一次加到辅助寄存器或从辅助寄存器中减去的值 循环寻址的算法 If 0≤index+step<BK; Index=index+step; Else if index+step≥BK; Index=index+step-BK; Else if index+step<0; Index=index+step+BK; 位码倒序主要用于FFT运算。FFT运算要求采样点输入是倒序时,输出才是顺序的,若输入是顺序的,则输出就是倒序。采用位码倒序寻址的方式正好符合FFT运算对输入倒序的要求 下列程序段用到了位码倒序寻址方法。 RPT #9 ;循环执行下一条语句9+1次 PORTW *A

文档评论(0)

yy556911 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档