杭电研一课件-11、寻址.ppt_第1页
杭电研一课件-11、寻址.ppt_第2页
杭电研一课件-11、寻址.ppt_第3页
杭电研一课件-11、寻址.ppt_第4页
杭电研一课件-11、寻址.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

本章学习目标 第九章 TMS320C54软件结构 掌握各种寻址方式 掌握常用指令 会分析常用汇编语言程序结构 一、汇编源程序的格式 C54xC54x汇编语言语句格式如下(汇编语言语句格式如下(4 4个部分):个部分): 标号标号 : : 指令指令 操作数列表操作数列表 ;注释;注释 beginbegin: LD #40LD #40, AR1 AR1 ;将立即数;将立即数4040传送给传送给ARlARl 其中:其中:(1) (1) 标号标号供本程序的其他部分或其他程序调用。标供本程序的其他部分或其他程序调用。标 号的值和它所指向的语句所在单元值相同。号的值和它所指向的语句所在单元值相同。 (2) (2) 指令域指令域包括以下指令码之一:包括以下指令码之一: 助记符指令助记符指令 ( (如如STMSTM,MACMAC,MPVDMPVD,STL)STL); 汇编伪指令汇编伪指令( (如如.data.data,.list.list,.set).set); 宏指令宏指令( (如如.macro.macro,. .varvar,. .mexitmexit) ); 宏调用。宏调用。 助记符助记符指令,一般用指令,一般用大写大写; 汇编伪指令和宏指令汇编伪指令和宏指令,以句点,以句点“ “.” .”开始,且为开始,且为小写小写。 (3)(3)操作数操作数可以是常量、符号,或是常量和符号的混合 可以是常量、符号,或是常量和符号的混合 表达式,操作数之间用逗号分开。表达式,操作数之间用逗号分开。 前缀前缀 # #表示其后的操作数为立即数。表示其后的操作数为立即数。 例如:例如:LabelLabel: ADD #123ADD #123,A A ; 汇编器允许在操作数前使用前缀来指定操作数汇编器允许在操作数前使用前缀来指定操作数( (常数常数 、符号或表达式、符号或表达式) )是地址还是立即数或间接地址。是地址还是立即数或间接地址。 前缀前缀 * *表示其后的操作数为间接地址。表示其后的操作数为间接地址。 例如:例如:LabelLabel:LD *AR4LD *AR4,A A ;以以AR4AR4的内容为地址,的内容为地址, 将该地址的内容装入累加器将该地址的内容装入累加器A A 前缀前缀 表示其后的操作数是采用直接寻址或绝对寻址的地址。表示其后的操作数是采用直接寻址或绝对寻址的地址。 例如:例如: ADD #10, XYZADD #10, XYZ ;XYZXYZ作为偏移量与数据页指针组合。作为偏移量与数据页指针组合。 (4)(4)注释注释可以从一行的任一列开始直到行尾。任一可以从一行的任一列开始直到行尾。任一ASCIIASCII 码码( (包括空格包括空格) )都可以组成注释。如果注释从第一列开始都可以组成注释。如果注释从第一列开始 ,用,用“ “;” ”号或号或“*”“*”号开头。号开头。 TMS320C54xTMS320C54x的指令系统符号和意义见的指令系统符号和意义见表表3-13-1 二、寻址方式 寻址方式:寻址方式:指当指当CPUCPU执行指令时,寻找指令所指执行指令时,寻找指令所指 定的参与运算的操作数的方法。定的参与运算的操作数的方法。 作用:作用:可以根据程序要求采用不同的寻址方式,可以根据程序要求采用不同的寻址方式, 以提高程序的速度和代码效率。不同的寻址方式以提高程序的速度和代码效率。不同的寻址方式 为编程提供了极大的柔性编程操作空间。为编程提供了极大的柔性编程操作空间。 C54C54共有共有7 7种种基本寻址方式基本寻址方式 立即寻址立即寻址 绝对寻址绝对寻址 累加器寻址累加器寻址 直接寻址直接寻址 间接寻址间接寻址 存储器映像寄存器寻址存储器映像寄存器寻址 堆栈寻址堆栈寻址 1 1、立即寻址、立即寻址 短立即数寻址(短字指令,数是8bit) 含含 义义:指令中包含有执行指令所需的操作数;:指令中包含有执行指令所需的操作数; 用用 途途:主要用于寄存器和存储器的初始化;:主要用于寄存器和存储器的初始化; RPT #99RPT #99;将紧跟在后面的语句重复;将紧跟在后面的语句重复99+199+1次次 LD #10 , A ; LD #10 , A ; 立即数立即数10A10A累加器累加器 LD #0h , DP ; LD #0h , DP ; 立即数立即数0 0装入数据页指针装入数据页指针 注意:立即数前必须有#号,后面跟h表示十六进制数。 ADD #0ffh , A ; ADD #0ffh , A ; 将将0ffh0ffh加给加给AccAAccA 短立即数寻址示图 长立即数寻址(16bit) 指令字的后一个字是立即数,所以是双字指令。 ADD #1234h , A ; ADD #1234h , A ; 将立即数将立即数1234h1234h加给加给AccAAccA 2、绝对地址寻址 数据存储器地址(dmad)寻址 用一个符号或一个数来确定数据空间中的一个地址 如:如:MVKDMVKD,DATADATA,* *AR5AR5;(DATADATA)(AR5)(AR5) 程序存储器地址(pmad)寻址 用一个符号或一个数来确定程序空间中的一个地址 如:如:MVPDMVPD,TABLETABLE,* *AR5AR5;(TABLETABLE)(AR5)(AR5) 端口地址(PA)寻址 用一个符号或一个数来确定端口的一个地址 lk寻址 如:如:PORTRPORTR,FIFOFIFO,* *AR5AR5;从端口从端口FIFOFIFO读数据读数据(AR5AR5) PORTWPORTW,* *AR2AR2,BOFOBOFO;将(将(AR2AR2)BOFOBOFO端口端口 用一个符号或常数确定一个数据存储器地址用一个符号或常数确定一个数据存储器地址 如:如:LDLD,* *(BUFFERBUFFER), A ; , A ; (BUFFERBUFFER)A A 注:访问数据空间的任意单元而不改变注:访问数据空间的任意单元而不改变DPDP的值,不用的值,不用 对对ARAR初始化初始化 3 3、 累加器寻址累加器寻址 含义含义:用累加器的数据作为地址来:用累加器的数据作为地址来读写读写程序程序存储器存储器; WRITA WRITA SmemSmem READA READA SmemSmem; 以以A A中的数作为地址,从中的数作为地址,从程序存储器程序存储器中读一个中读一个 数数由由SmemSmem所指的所指的数据存储器数据存储器中中 说明说明:累加器的内容低:累加器的内容低1616位是程序存储器的地址;位是程序存储器的地址; 将数据存储器中的数将数据存储器中的数由由A A所指的程序存储器中所指的程序存储器中 4、直接寻址 TMS320C54的数据存储器分为512页,每页128字。设 置一个9位的数据页指针DP,加上一个7位的页内偏移地 址,构成16位的数据地址。 LD #4 , DP ;指向页4(0200h-027Fh) ADD 9h , A ;将数据页4中地址为9h的数据加给AccA 直接寻址:直接寻址:用指令中包含的数据存储器地址的低用指令中包含的数据存储器地址的低7 7位位+ +基地址基地址 1616位位数据存储器数据存储器地址。地址。 第7位确定了寻址方式,若I=0,表示指令使用直接寻址方式 基地址基地址: DP_ DP_ 数据页指针数据页指针 SP_SP_堆栈指针堆栈指针 指令代码格式:指令代码格式: 用途用途:利用数据页指针和堆栈指针寻址数据存储器:利用数据页指针和堆栈指针寻址数据存储器 说明: 地址形成 当ST1中的CPL=0时,由ST0中的DP值(9位地址)与指令中的 7位地址一道形成16位数据存储器地址。 当ST1中的CP=时,将指令中的7位地址与16位堆栈指 针SP相加,形成16位的数据存储器地址。 RSBX CPL ; RSBX CPL ; CPL=0CPL=0,选用数据页指针,选用数据页指针,SSBXSSBX为设置为设置 LD #2, DP;LD #2, DP; LD 60H, 16, A ; LD 60H, 16, A ; 第第2 2页的页的60H60H单元内容左移装入单元内容左移装入A A中中 该方式可在不改变该方式可在不改变DPDP或或SPSP的情况下,随机寻址的情况下,随机寻址128128个单元个单元; ; 因为因为DPDP值的范围是从值的范围是从0 0到到511511,把存储器分成,把存储器分成512512页。页。 指令长度只需指令长度只需1 1个字(个字(1616位)位); ; 例如: 5、间接寻址 含义含义:按辅助寄存器:按辅助寄存器R R中的内容寻址数据存储器中的内容寻址数据存储器 用途:用途:主要用在需要存储器地址以步进方式连续变化的场合。主要用在需要存储器地址以步进方式连续变化的场合。 1 1)地址形式:)地址形式: AR0AR0AR7AR7 2 2)间接寻址方式非常灵活:在一条指令中访问两个)间接寻址方式非常灵活:在一条指令中访问两个 DMDM单元(能在两个独立的单元(能在两个独立的MM读数据,或在一个读数据,或在一个MM读读 另一个另一个MM单元写)单元写) 3 3)间接寻址有两种方式:)间接寻址有两种方式: 单操作数间接寻址,双操作数间接寻址。单操作数间接寻址,双操作数间接寻址。 单操作数间接寻址 一条指令中,只有一个存储器操作数一条指令中,只有一个存储器操作数( (即从存储器中只即从存储器中只 存取一个操作数存取一个操作数) ),其指令的格式,其指令的格式 第第7 7位位I=1I=1,表示指令的寻址方式为间接寻址;,表示指令的寻址方式为间接寻址; 6 63 3位为方式位为方式(MOD)(MOD),定义了间接寻址的类型(,定义了间接寻址的类型(P57P57表表3 33 3) 2 20 0位定义寻址所使用的辅助寄存器位定义寻址所使用的辅助寄存器( (如如AR0AR0AR7)AR7)。 例如:例如:LD *AR2+LD *AR2+,A A ;表示将由表示将由AR2AR2寄存器内容所指向的数据存寄存器内容所指向的数据存 储器单元中的数据传送到累加器储器单元中的数据传送到累加器A A中,然后中,然后AR2AR2中的地址加中的地址加1 1。 间接寻址示图 间接寻址示图 MOD域 共有共有1616种间接寻址的类型种间接寻址的类型 加加1 1、减、减1 1;(如;(如* *ARx ARx- - 、* *ARxARx+ + 、* *+ARx+ARx) ) 加一个加一个1616位偏移量;(如位偏移量;(如* *ARx(lk ARx(lk) )、* *+ +ARx(lkARx(lk) ) ) 用用AR0AR0中的值索引寻址;(如中的值索引寻址;(如* *ARx-0 ARx-0和和* *ARx+0ARx+0) 以以%符号表示的符号表示的循环寻址 循环寻址,如,如* *ARx+0%ARx+0%; 以以B B符号表示符号表示位倒序寻址 位倒序寻址,如,如* *ARx+0BARx+0B。 可以在指令执行存取操作前或后修改要存取操作可以在指令执行存取操作前或后修改要存取操作 数的地址。数的地址。 间接寻址举例 ADD *, 8 , A ; 将当前辅助寄存器所指的地址里的 数据,左移 8位后加给AccA ADD *+, 8 , A ,AR4 ; 数据左移 8位加给AccA后, 当前辅助寄存器加1,选择辅助寄存器AR4 间接寻址举例 ADD *+0, 8 , A ; 数据左移 8位加给AccA后 ,将AR0的值加给当前辅助寄存器 ADD *ARx+0B, 8 , A ; 数据左移 8位加给AccA后 ,将AR0的值加给当前辅助寄存器,但反向进位。 正向进位与反向进位 1 0 01 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 用途:用在位倒序寻址 循环寻址 实现循环缓冲区的关键是实现循环缓冲区的关键是循环寻址循环寻址。 用途:用途:在卷积、自相关和在卷积、自相关和FIRFIR滤波器等许多算法中,都滤波器等许多算法中,都 需要在存储器中设置循环缓冲区。需要在存储器中设置循环缓冲区。 它它是一个滑动窗,是一个滑动窗, 包含最近的数据,若有新的数据到来,它将覆盖旧的包含最近的数据,若有新的数据到来,它将覆盖旧的 数据。数据。 循环缓冲器主要参数 步长(步长(StepStep):):一次加到辅助一次加到辅助R R或从辅助或从辅助R R中减去的值;中减去的值; 例如,一个长度为例如,一个长度为3131个字的循环缓冲区必须开始于最低个字的循环缓冲区必须开始于最低5 5位为位为 零的地址零的地址( (即即XXXX XXXX XXXXXXXX XXX0 0000b) XXX0 0000b),且赋值,且赋值BK=31BK=31。 长度计数器(长度计数器(BKBK):):定义了循环缓冲区的大小定义了循环缓冲区的大小R( )R( ); 有效基地址(有效基地址(EFBEFB):):定义了循环缓冲区的起始地址,定义了循环缓冲区的起始地址, 即即ARxARx低低NN位设为位设为0 0所得到的值;所得到的值; 尾地址(尾地址(EOBEOB):):定义了循环缓冲区的尾部地址定义了循环缓冲区的尾部地址; 缓冲区索引(缓冲区索引(IndexIndex):):当前当前ARxARx的低的低NN位;位; If 0index+step BKIf 0index+step BK; Index =Index =index+stepindex+step; Else if Else if index+stepindex+step BK BK; Index =Index =index+stepindex+step-BK-BK; Else if Else if index+stepindex+step 0 0; Index =Index =index+step+BKindex+step+BK; 循环寻址的算法 使用循环寻址时,必须遵循以下三个原则 所使用的所使用的辅助寄存器辅助寄存器必须指向缓冲区单元。必须指向缓冲区单元。 循环缓冲区的长度循环缓冲区的长度 ,且地址从一个低,且地址从一个低NN位为位为0 0 的地址开始;的地址开始; 步长步长小于或等于循环缓冲区的长度小于或等于循环缓冲区的长度; ; 执行第二条指令执行第二条指令时:时:index = index = indexindex+ step= 8+8=16 + step= 8+8=16 BKBK; 故:故:index=index=index+stepindex+step-BK=8+8-10=6 -BK=8+8-10=6 (寻址(寻址106H106H单元单元 ) 举例举例: LD *+AR1LD *+AR1(8 8)%,A A; STL ASTL A, * *+AR1+AR1(8 8)%; 假定假定:BK=10BK=10,N=4N=4,AR1=100HAR1=100H 由上可知:由上可知:index = 0 index = 0 (因为(因为 AR1AR1的低四位)的低四位) Step =8Step =8(* *+AR1+AR1(8 8)%) 执行第一条指令执行第一条指令时:时:index = index = indexindex + step = 8 + step = 8 (寻址(寻址108H108H单元)单元) 循环寻址过程 位倒序寻址 用途用途:主要用于:主要用于FFTFFT运算,可提高运算,可提高FFTFFT算法的执行速算法的执行速 度和存储器的使用效率。度和存储器的使用效率。 原因原因:当:当FFTFFT输入样点值是倒序时,输出是顺序;反之亦输入样点值是倒序时,输出是顺序;反之亦 然,采用位码倒寻址的方式恰好符合然,采用位码倒寻址的方式恰好符合FFTFFT算法要求。算法要求。 实现方法实现方法: AR0AR0存放的整数存放的整数NN是总单元个数的是总单元个数的1/21/2; ARXARX指向一个数据存放的物理单元;指向一个数据存放的物理单元; AR0AR0以地址倒序的方式以地址倒序的方式+ +ARxARx(即进行从左到右加法进位);(即进行从左到右加法进位); 存储单元地址变换结果位码倒序位码倒序寻址结果 0000X(0)0000X(0) 0001X(8) 1000X(1) 0010X(4) 0100X(2) 0011X(12)1100X(3) 0100X(2) 0010X(4) 0101X(10)1010X(5) 0110X(6) 0110X(6) 0111X(14)1110X(7) 1000X(1) 0001X(8) 1001X(9) 1001X(9) 1010X(5) 0101X(10) 1011X(13)1101X(11) 1100X(3) 0011X(12) 1101X(11)1011X(13) 1110X(7) 0111X(14) 1111X(15)1111X(15) 位倒序寻址举例 假设辅助寄存器都是假设辅助寄存器都是8 8位字长,位字长,AR2AR2中存放数据存储中存放数据存储 器的基地址,指向器的基地址,指向X(0)X(0)的存储单元,设定的存储单元,设定AR0AR0的值是的值是FFTFFT 长度的一半。长度的一半。 即:即: AR2=0110 0000AR2=0110 0000(存储器基地址存储器基地址) AR0=0000 1000AR0=0000 1000(FFTFFT长度的一半长度的一半) 举例举例:以:以1616点点FFTFFT为例,当输入序列是顺序时,其为例,当输入序列是顺序时,其 FFTFFT变换结果的次序为变换结果的次序为X(0)X(0)、X(8)X(8)、X(4)X(4)、X(15)X(15)的的 倒序方式(倒序方式(表表3-43-4 ),), 执行指令:执行指令: RPTRPT#15#15;循环执行下一条语句循环执行下一条语句15+115+1次次 PORTW *AR2 +0BPORTW *AR2 +0B,PAPA;PAPA为外设输出端口为外设输出端口 ,AR0AR0以倒序方式加入以倒序方式加入 注:第注:第0 0次循环次循环 (0110 0000) PA X(0)(0110 0000) PA X(0) 第第1 1次循环次循环 (0110 1000) PA X(1) (0110 1000) PA X(1) 第第2 2次循环次循环 (0110 0100) PA X(2) (0110 0100) PA X(2) 第第3 3次循环次循环 (0110 1100) PA X(3) (0110 1100) PA X(3) 利用上述两条指令即可向外设口利用上述两条指令即可向外设口( (口地址为口地址为PA)PA)输出输出 整序后的整序后的FFTFFT变换结果。变换结果。 双操作数间接寻址 用途:用途:用在完成两个读或一个读且一个写的指令中。用在完成两个读或一个读且一个写的指令中。 说明:说明:该指令只有一个字长,只能以间接寻址的方式工作。该指令只有一个字长,只能以间接寻址的方式工作。 其中其中: : 7 76 6位为位为XmodXmod,定义了用于访问,定义了用于访问XmemXmem操作数间接寻址操作数间接寻址 方式的类型(见表方式的类型(见表3-53-5);); 1 10 0位为位为YarYar,确定了包含,确定了包含YmemYmem的辅助寄存器。的辅助寄存器。 5 54 4位为位为XarXar,确定了包含,确定了包含XmemXmem地址的辅助寄存器;地址的辅助寄存器; 3 32 2位为位为YmodYmod,定义了用于访问,定义了用于访问YmemYmem操作数的间操作数的间 接寻址方式的类型;接寻址方式的类型; 6、存储器映射寄存器(MMR)寻址 存储器映射寄存器寻址用来修改存储器映射寄 存器而不影响当前数据页指针(DP)或堆栈指针( SP)的值。存储器映

温馨提示

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

评论

0/150

提交评论