DSP汇编伪指令集讲解
第五章 DSP的汇编指令..

第五章 TMS320C55x系列DSP的汇编指令
(2) 用户自定义的双指令的并行
这两条指令的并行是通过用户或C编译器定义的。两条指令 同时执行两个操作,用并行符“||”区分并行执行的两条指令。 例:
MPYM *AR1+, *CDP, AC1 ;D单元的一个MAC来完成
||XOR AR2,T1
;A单元的ALU来完成
第五章 TMS320C55x系列DSP的汇编指令
1、高速数字信号处理中常采用汇编语言编程。 2、汇编语言中的两种指令集 (1) 助记符指令集:有助于记忆的符号来表示指令。 (2) 代数指令集:类似于代数表达式,运算关系清楚明了。 注意:DSP的软件开发工具只支持单一的指令形式,不支持助记
符指令和代数指令的混合形式。 3、术语、符号和缩写见P93的表5-1 4、运算符见表5-2
令执行的条件:
TCx(测试/控制标志为1) !TCx(测试/控制标志为0)
TC1&TC2 TC1&!TC2 TC1|TC2 TC1|!TC2 TC1^TC2 TC1^!TC2
!TC1&TC2 !TC1&!TC2 !TC1|TC2 !TC1|!TC2 !TC1^TC2 !TC1^!TC2
第五章 TMS320C55x系列DSP的汇编指令
4、双16比特算术指令: [(1)语法、(2)操作数、(3)状态位] 在D单元中利用其ALU的双16比特模式,同时执行(并行)两个16
比特算术运算,包括加-减、减-加、两个加和两个减运算。
例:
说明: NO:不能并行执行 3:指令的长度为3字节 1:周期为1 X:在X(执行)流水线阶段处理
D – ALU:在D单元ALU执行。 执行结果:AC0=(*AR3)+CARRY+AC1 状态位: Affected by CARRY,C54CM,M40等
DSP常用汇编语言指令简介

南航自动化学院DSP技术应用实验 室
6. I/O与存储器等指令举例
z Example1:IN 7,1000h ;(DP=6)从地址为1000H 的外部端口读入数据,盛放在地址为307h的数 据单元内。类似的指令还有:OUT。
LAR AR0, #60h
;AR0内容赋值为60h
ZAC
; 累加器ACC清零
loop: ADD *+, AR1 ;把当前工作寄存器AR0指向 的内存单元数值加到ACC,然后AR0内容加1,当前工 作寄存器指针指向AR1
BANZ loop, *-AR0 ;判断AR0是否为0,否则程序 转到loop,同时AR0的内容减1。
3. TREG(暂存单元指令),PREG(乘积单元指 令),multiply instructions (乘积指令)
4. Branch instructions (程序分支转移指令) 5. Control instructions (控制指令) 6. I/O and memory instruction(I/O和存储器指令)
室
2. 工作寄存器等指令举例
z Example1:MAR *+,AR1;把当前工作寄 存器的内容加1,然后再改变工作寄存器为 AR1。
z Example2:LAR AR4,#8123h;把AR4的 值改变为立即数。
LAR AR0,16;(DP=6)把 地址=310H的内存单元内容装入AR0。
z Example3:SAR AR0,*+;(如果当前工 作寄存器=AR1)把AR0的内容拷贝到AR1 指向的内存单元。 南航自动化学院DSP技术应用实验
汇编指令、伪指令大全

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.PUSH SRC //Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST //Word出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令: 将两操作数值交换.XCHG OPR1, OPR2 //Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码.XLAT (OPR 可选) //Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中.执行操作: REG = EAsrc注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX , OFFSET OPER_ONE 等价于 LEA BX , OPER_ONEMOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。
dsp中的汇编伪指令

dsp中的汇编伪指令dsp中的汇编伪指令伪指令分类伪指令及其表⽰格式具体描述段定义伪指令 .asect “段名” , 地址汇编到⼀以绝对地址为起始的段中 .bss 符号,字数[,块标号] 在未初始化数据段bss中保留空间 .data 汇编到已初始化数据段data中 .sect “段名” 汇编到⼀已命名(已初始化)的段中.text 汇编到可执⾏代码段text中符号 .usect “段名”,字数[,块标号] 在⼀已命名(未初始化)的段中保留空间常数初始化伪指令(包括数据和地址常数) .bes 位数在当前段中保留位数(标号指向所保留空间的尾部) .bfloat 数值初始化⼀个32位,IEEE单精度的浮点常数;禁⽌有跨页的初始化对象。
.blong 数值1[,…,数值n] 初始化⼀个或多个32位整数;禁⽌有跨页的初始化对象。
.byte 数值1[,…,数值n] 初始化当前段中⼀个或多个连续字节 .field 数值1[,…,数值n] 初始化⼀个可变长度的字段 .float 数值初始化⼀个32位,IEEE单精度的浮点常数 .int 数值1[,…,数值n] 初始化⼀个或多个16位整数 .long 数值1[,…,数值n] 初始化⼀个或多个32位整数 .space 位数在当前段中保留位数(标号指向所保留空间的头部) .string “字符串1”[,…,“字符串n”] 初始化⼀个或多个⽂本字符串 .word 数值1[,…,数值n] 初始化⼀个或多个16位整数对准段程序计数器的伪指令 .align 在⼀页的边缘对准SPC(段程序计数器) .even 在⼀偶数的边缘对准SPC定义输出列表格式的伪指令 .drlist 使所有伪指令⾏都被列出(缺省⽅式) .drnolist 禁⽌某些伪指令⾏的列出 .fclist 允许列出错误的条件代码块(缺省⽅式) .fcnolist 禁⽌列出错误的条件代码块 .length 页的长度定义源⽂件列表的页长 .list 从头开始源⽂件的列表 .mlist 允许宏列表和循环块(缺省⽅式) .mnolist 禁⽌宏列表和循环块定义输出列表格式的伪指令 .nolist 停⽌源⽂件列表 .option{B/D/F/L/M/T/X} 选择输出列表⽂件的参数 .page 在源⽂件列表中⽣成⼀页.sslist 允许扩展⼦程序符号列表 .ssnolist 禁⽌扩展⼦程序符号列表(缺省⽅式) .tab ⼤⼩设置表的⼤⼩ .title “字符串” 在列表页头显⽰⼀个标题 .width 页宽设置源⽂件列表的页宽外部⽂件定位的指伪令 .copy [“]⽂件名[”] 包含其他⽂件中的源语句 .def 符号1[,…,符号n] 标明⼀个或多个在当前模块中定义⽽在其他模块中要⽤到的符号 .global 符号1[,…,符号n] 标明⼀个或多个全局(外部)符号 .include [“]⽂件名[”] 包含其他⽂件中的源语句 .mlib [“]⽂件名[”] 定义宏定义库 .ref符号1[,…,符号n] 标明⼀个或多个在另⼀模块中定义⽽在当前模块中要⽤到的符号条件汇编伪指令 .break [确切定义的表达式] 如果条件满⾜,就结束.loop汇编。
第七章_DSP的汇编伪指令

址的块) • .usect建立的段是在RAM中为变量保留空间
(类似于.bss段),.sect建立的是包含代码或数 据的段(类似于.text段和.data段)。 • 汇编器确定汇编语言程序的各个部分属于哪 一个特定的段,汇编器有六个命令来完成这种 功能,即:用于创建未初始化段.bss, .usect和 用于创建已初始化.text, .data, .sect,.asect, 如果程序未作说明,则统一汇编到.text段中。
宏语言可以使用户:
定义自己的宏,或重新定义正执行的宏 简化长的或复杂的汇编代码 访问由归档器建立的宏库 在一个宏内定义条件块和可重复的块 在一个宏内操作字符串 控制展开列表
定义宏
在程序中使用宏之前,首先必须定义它。可 以用两种方法来定义:
(1)在源文件开始处定义; (2) .include/.copy文件中定义; (3)在宏库中定义。
汇编伪指令
伪指令(Assembler Directives)
段定义伪指令
❖.bss
在该段中保留若干字
❖.data
汇编入已初始化的数据段
❖.sect “section name” 汇编入已命名的段
❖.text
汇编入可执行的代码段
.bss page,128 在 .bss段中为page定义128个字。
写入一个命令文件link.cmd :
定义宏举例
* add3 p1, p2, p3 (形参) * p3 = p1 + p2 + p3
add3 .macro p1, p2, p3 lacc p1 add p2 add p3 .endm
3-3 汇编伪指令

MAC *AR3+,*AR4+,A ;执行乘法并累加,结果放在A中
STL A,@y ;将A的低字内容送结果单元y
RET
;结束子程序
.end
;结束全部程序
No Assembly Errors, No Assembly Warnings
Field 4:
源程序语
17
句
(4)列表文件——段定义举例
例4-4 2 3
000001 0000
16 000002 7718
STM #STACK+10h,SP ;设置堆栈指针初值
000003 001017 000004 7711
000005 000018 000006 EC07
源文件的每一行都会在列表文件 STM #a,A中R1生成;A一R1行指向。a包的地括址行号、段程序 RPT #7 计数器;从S程P序C的存储数器值向、数据汇存编储后器 的目
;;;为为定源结F变义i果e量程标l句dyx号序分4分:语配配41个个单单元元的的空空间间15
一条指令可以生成1或2个字的目标代码。
11 000000
.data
;定义数据代码段
12 000000 0001 table: .word 1,2,3,4 ;在标号table开始的8个单元中
000001 0002 000002 0003 000003 0004
;定义数据代码段
;在标号table开始的8个单元中
;为这8个单元赋初值
13
(3)段程序计数器(SPC)
作用 表示一个程序代码段或数据段的当前地址
编址 过程
一开始,汇编器将每个SPC置0。当汇 编器将程序代码或数据加到一个段内 时,相应的SPC就增加。如果再继续对 某个段汇编,则相应的SPC就在先前的 数值上继续增加。链接器在链接时要 对每个段进行重新定位。
c54xx系列DSP汇编指令详解

意义 或运算 异或运算
减1 赋值于 表示一个立即数 x 的补码
|x|
x 的绝对值
0x
十六进制数据
>>
右移
<<
左移
×
乘法
*
指针指向的地址
TMS320C54xx 系列 DSP 的指令一共有 129 条,按功能分为如下几类:算术指令、逻 辑指令、程序控制指令、存储和装入指令以及循环指令。下面根据每种指令功能的不同,
目的累加器的反 if dst=A,then dst_=B if dst=B then dst_=A
E 地址总线 EAB 地址寄存器 23 位立即数表示的程序存储器地址 ST1 寄存器中的分数方式位 十六进制数据 十六进制数据 累加器 A 的高端(位 32~16) ST1 寄存器中的保持方式位 中断标志寄存器 ST1 寄存器中的中断屏蔽位 少于 9 位的短立即数
3 位立即数(0 ≤ k3 ≤ 7 ) 5 位立即数(-16 ≤ k5 ≤ 15 ) 9 位立即数(0 ≤ k9 ≤ 115 )
16 位长立即数 使用长字寻址 32 位单数据存储器操作数 存储器映射寄存器,AR0~AR7 或 SP
存储器映射寄存器,AR0~AR7 或 SP
紧跟 XC 指令的字数,n=1 或 2 指定在 RSBX、SSBX 和 XC 指令中修改的状态寄存器 N=0,状态寄存器 ST0 N=1,状态寄存器 ST1 ST0 寄存器中的累加器 A 的溢出标志 ST0 寄存器中的累加器 B 的溢出标志 目的累加器(A 或 B)的溢出标志 目的累加器反(A 或 B)的溢出标志 源累加器(A 或 B)的溢出标志 ST1 寄存器中的溢出方式位 16 位立即数表示的端口地址
③ 乘法指令
DSP教程4.TMS320C55x的指令系统_伪指令

条件汇编伪指令
• .if/.else/.endif 条件汇编代码块 • .loop/.endloop 条件循环代码块
宏语言
• Macro:A user-defined routine that can be used as an instruction
• 这条指令是我们用户定义的,并非汇编函 数中含有的。 • 当程序要将特定的程序任务执行若干次时, 显得尤为重要。
• 在宏库中定Biblioteka ,我直接调用这个宏库就可 以了定义宏 续
• Macname .macro [parameter] • Model statement • [.mexit] • .endm • Macname:宏名,相当于你自己造的操作码
例子
我们定义一个三个数的相加
调用宏
• 在源代码中永红的名字作为操作数来进行 宏调用。 • add3 就是宏名,调用的时候这个就可以看 成一个指令。
伪指令 Assembler Directives
伪指令为程序提供数据、控制汇编的过程, 主要工作包括: • 将代码和数据汇编到制定的位置 • 在存储器中为未初始化的变量保留存储空 间( • 控制列表的方式 • 定义全局变量 • 为汇编器制定可以获得宏
段定义伪指令
• .bss 在该段保留若干个子 • .data 汇编已经初识话的数据段 • .sect“section name”已初始化的自定义段。 中断向量表就是一个很好的例子 存在FLASH 中程序段 • .text 汇编的可执行的代码段,是指text下面 的汇编代码都存在该段,(程序段),C语 言经过汇编器编译后所生成的汇编指令就 是存在该段
宏语言可使用户执行的操作
• 可以定义自己的宏,或者重新定义正在执 行的宏。
第三章DSP汇编指令

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
只有8条指令能使用存储器映射寄存器寻址:
LDM MMR, dst MVDM dmad, MMR MVMD MMR, dmad MVMM MMRx, MMRy POPM MMR PSHM MMR STLM src, MMR STM #lk, MMR
7. 堆栈寻址
系统堆栈用来在中断和子程序期间自动存放程序计数器。 它也能用来存放额外的数据项或传递数据值。处理器使用一 个16-bit的存储器映射寄存器—堆栈指针来对堆栈寻址,它 总是指向存放在堆栈中的最后一个元素。
2、调用与中断指令
3、返回指令
4、重复指令和堆栈操作指令
四、装入和存储指令
装入和存储指令包括:
一般的装入和存储指令 条件存储指令 并行装入和存储指令 并行装入和乘法指令 并行存储和加件乘指令 混合装入和存储指令
1、一般的装入指令
2、存贮指令
3 并行装入和存储指令 4、条件存储指令
共有四条使用堆栈寻址方பைடு நூலகம்访问堆栈的指令:
PSHD 把一个数据存储器的值压入堆栈。 PSHM 把 一 个 存 储 器 映 射 寄 存 器 的 值 压 入 堆 栈 。 POPD 把一个数据存储器的值弹出堆栈。 POPM 把一个存储器映射寄存器的值弹出堆栈。
§3-2 特殊寻址方式说明
2407DSP第4章汇编语言及伪指令

《DSP原理及应用》
2
北京理工大学珠海学院信息学院
第4章 汇编语言和伪指令
4.1.1 汇编语言源程序格式
典型的汇编语言格式是四段式格式:
标号段: 操作码段 操作数段 ; 注释段
LABLE : OPCODE OPRAND ;COMMENT
其中操作码段是必选项,任何语句都必须有操作码 段。如果是多个操作数,中间用逗号隔开。
头文件的扩展名为:*.h ; 汇编语言头文件:包含了各种寄存器的名称和地址, 此外,用户还可以定义各种常量和宏; C语言头文件:包含了C语言定义下的各种语言定义下 的各种寄存器和地址,还包含支持C语言的的各种库函数; 头文件必须放在C源程序的开始,并使用“#include” 语句声明和添加。或者在汇编主程序的开始使用汇编伪 指令.include、.copy对头文件进行调用。
《DSP原理及应用》
4
北京理工大学珠海学院信息学院
第4章 汇编语言和伪指令
[伪指令语句] 伪指令语句是用于指示汇编程序如何汇编源程序,所
以这种语句又叫命令语句。例如源程序中的伪指令语句告 诉汇编程序:该源程序如何分段,有哪些逻辑段在程序段 中哪些是当前段,它们分别由哪个段寄存器指向;定义了 哪些数据,存储单元是如何分配的等等。伪指令语句除定 义的具体数据要生成目标代码外,其他均没有对应的目标 代码。伪指令语句的这些命令功能是由汇编程序在汇编源 程序时,通过执行一段程序来完成的,而不是在运行目标 程序时实现的。
举例 一般用于一个汇编文件的结尾
.include “240x.h” .title “vectors.asm” .copy “word.asm”
.def x,y,z
.ref x,y,z
.global .int
[转载]DSP汇编伪指令总结
![[转载]DSP汇编伪指令总结](https://img.taocdn.com/s3/m/bdc1c7f59a89680203d8ce2f0066f5335a81673b.png)
[转载]DSP汇编伪指令总结原⽂地址:DSP汇编伪指令总结作者:慕慕1.定义段的伪指令助记符和语法说明.asect"section name",address汇编⾄绝对命名(初始化)段(此段已过时).bss symbol, size in words [, blocking flag]在.bss段(未被初始化数据段)保留size个字.data汇编⾄数据(初始化数据)段.sect ”section name”汇编⾄⼀个命名(已初始化)段.text汇编⾄.text可执⾏代码)段symbol .usect “section name”, size in words,[blocking flag]在1个命名段(未被初始化)保留.size个字2.初始化常数(数据和存储器)的伪指令助记符号和语法说明.bes size in bits 在当前段保留size位;标号指向保留间的末尾.bfloat value 初始化⼀个32位,IEEE单精度浮点常数;不允许⽬标跨越业界..blong value1 [, ... , valuen ]初始化⼀个或多个32位的整数;不允许⽬标跨越页边界.byte value1 [, ... ,valuen ]在当前段初始化⼀个或多个连续字节 .field value [, size inbits]初始化可变长度域.float value初始化⼀个32位,IEEE单精度浮点数 .int value1 [, ... ,valuen ]初始化1个或多个16位整数.long value1 [, ... ,valuen ]初始化个或多个32位整数.space size in bits在半前段保留.size位;标号指向保留空间的末尾.string ”string1” [, ... ,”stringn”]初始化—个或多个.text串.word value1 [, ... ,valuen ]初始化⼀个或多个16位整数3.调整段程序计数器伪指令(SPC).align 把SPC调整到页边界.even 把SPC调整到偶数字边界4.控制输出列表格式化伪指令.drlist允许所有伪指令⾏的列出(默认) .drnolist禁⽌特定的伪指令⾏的列出 .fclist允许列出度假条件代码块(默认) .fcnolist禁⽌列出虚假条件代码块.length page length设置源列表的页长度.list重启源列表5.条件汇编伪指令.break [well-defined expression] 如果条件真结束.loop汇编,.break结构是可选项.else 如果.if条件为假,汇编代码块.else结构是可选项.elseif well-defined expression——如果if条件为假且.elseif条件为真,汇编代码块.else结构是可选项.endif 结束.if代码块.endloop 结束.1oop代码块.if well-defined expression 如果条件为真则汇编代码块.loop [well-defined expression] 开始代码块的重复汇编6. 汇编符号.asg [”] character string [”],substitution symbol—— 把字符串赋予替代的符号..endstruct 结束结构定义.equ 使值和符号相等.eval well-defined expression,substitution symbol 根据数字替代符号完成运算.newblock 取消局部标号.set 使数值和符号相等.struct 开始结构定义.tag 把结构属性赋予标号7.其他伪指令.emsg string 把⽤户定义的错误信息送到输出器件.end 结束程序.label symbol 在段中定义装载时可重定位标号.mmregs 把存储器映射寄存器输⼊到符号表中.mmsg string 把⽤户定义信息送到输出设备.port 打开汇编器移植开关.sblock ”section name” [,”section name”, . . . ] 为块指定段.version generation #number 为块指定段.wmsg string 将⽤户定义的警告信息送到输出设备。
DSP中的汇编伪指令

中的汇编伪指令汇编伪指令提供程序数据,控制汇编过程。
段定义伪指令;汇编到可执行代码段中;汇编到已初始化数据段中“段名”;汇编到一已命名(已初始化)的段中“段名” , 地址;汇编到一以绝对地址为起始的段中符号,字数[,块标号(一般在的前面)] ;在未初始化数据段中保留空间“段名”,字数[,块标号] ;在一已命名(未初始化)的段中保留空间常数初始化伪指令(包括数据和地址常数) 位数在当前段中保留位数(标号指向所保留空间的尾部)数值;初始化一个位,单精度的浮点常数;禁止有跨页的初始化对象。
数值[,…,数值] 初始化一个或多个位整数;禁止有跨页的初始化对象。
数值[,…,数值] 初始化当前段中一个或多个连续字节数值[,…,数值] 初始化一个可变长度的字段数值;初始化一个位,单精度的浮点常数数值[,…,数值] 初始化一个或多个位整数数值[,…,数值] 初始化一个或多个位整数位数在当前段中保留位数(标号指向所保留空间的头部)“字符串1”[,…,“字符串”]初始化一个或多个文本字符串数值[,…,数值] 初始化一个或多个位整数对准段程序计数器的伪指令在一页的边缘对准(段程序计数器)在一偶数的边缘对准定义输出列表格式的伪指令使所有伪指令行都被列出(缺省方式)禁止某些伪指令行的列出允许列出错误的条件代码块(缺省方式)禁止列出错误的条件代码块页的长度定义源文件列表的页长从头开始源文件的列表允许宏列表和循环块(缺省方式)禁止宏列表和循环块定义输出列表格式的伪指令停止源文件列表{} 选择输出列表文件的参数在源文件列表中生成一页允许扩展子程序符号列表禁止扩展子程序符号列表(缺省方式)大小设置表的大小“字符串”在列表页头显示一个标题页宽设置源文件列表的页宽外部文件定位的指伪令[“]文件名[”]包含其他文件中的源语句符号[,…,符号] 标明一个或多个在当前模块中定义而在其他模块中要用到的符号符号[,…,符号] 标明一个或多个全局(外部)符号[“]文件名[”]包含其他文件中的源语句[“]文件名[”]定义宏定义库符号[,…,符号] 标明一个或多个在另一模块中定义而在当前模块中要用到的符号条件汇编伪指令[确切定义的表达式] 如果条件满足,就结束汇编。
第3.3章 汇编 伪指令

DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
3 AR3PLC
R/W-0
2 AR2PLC
R/W-0
1 AR1PLC
R/W-0
0 AR0PLC
R/W-0
R/W 可进行读写访问 —X X是DSP复位后的值,如果X是pin,X是pin上复位后的电平
BIT 向状态寄存器保护地址的写操作无效,在读操作时这个位总是0
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
第10节汇编程序常用伪指令简介PPT课件

初值表中每个数据一定是字量 (Word),一个字单元可用于存放任 何16位数据:
一个段地址 一个偏移地址 两个字符 0~65535之间的无符号数 -32768~+32767之间的带符号数
-
d第at3a章 segment ;数据段 count dw 8000h,?,'AB' maxint equ 64h number dw maxint array dw maxint dup(0) data ends
变量名 伪指令助记符 初值表
变量定义伪指令最常使用
汇编语言规定有DB、DW、DD、DF、DQ、 DT
-
第3章
变量定义伪指令助记符
➢变量定义伪指令根据申请的主存 空间单位分类
➢DB——定义字节伪指令 ➢DW——定义字伪指令 ➢DD——定义双字伪指令 ➢DF——定义3字伪指令 ➢DQ——定义4字伪指令 ➢DT——定义10字节伪指令
➢ STACK SEGMENT PARA STACK ;堆栈段开始
➢
DB 64 DUP(?)
;堆栈段空间为100个字节
➢ STACK ENDS
;堆栈段结束
➢ MYDATA SEGMENT PARA ‘STACK’ ;数据段开始
➢ NUM1 DB 2AH
;数据段放的数据
➢ NUM2 DB 78H
➢ PRODUPCT DW ?
➢
LISTB DW 100 DUP (432H1) ; 100字的目的缓冲区
➢ ESEG ENDS
;附加段结束
➢ CSEG SEGMENT
;代码段开始
➢
ASSUME CS:CSEG DS:DSEG;指明代码段、数据段段名
DSP第五章 DSP的汇编指令

展和移位操作都以第31比特为准。
M40=1时,D单元按40位运算模式,因此累加器溢出,进位,符号扩
展和移位操作都以第39比特为准。
BCLR M40
; Clear M40
BSET M40
; Set M40
第五章 TMS320C55x系列DSP的汇编指令
2、累加器溢出状态(ACOVx)
当AC0~AC3寄存器溢出时,目的累加器的溢出状态位ACOV0~3被置1。 以下情况会清零ACOVx位
复位; CPU执行一个跳转,条件调用,条件返回或执行一条测试ACOVx的指令; 通过BCLR指令清除; 溢出位检测受ST1_55中的M40位影响,即:
第五章 TMS320C55x系列DSP的汇编指令
(3)内置并行指令与用户自定义并行指令的混合形式 在不引起资源冲突的情况下,将隐含并行的指令按用户自定义 方式与另一条指令并行执行。例:
MPY *AR0, *CDP, AC0 ;隐含的或内置的并行指令 :: MPY *AR1, *CDP, AC1 ||MOV #5, AR1
பைடு நூலகம்
在实际编程时,只要指令满足这三条基本规则,即可写成并行
方式,然后进行编译。如果编译有错,则可参照书上详细规则进 行检测。
第五章 TMS320C55x系列DSP的汇编指令 5.4 TMS320C55x DSP的汇编指令
TMS320C55x DSP的汇编指令按操作分为以下6类 算术运算指令 比特操作指令 一条指令的属性包括: 语法(Syntax) 执行的操作 操作数 相关的状态位 是否有并行使能位 长度(Size) 执行周期(Cycles) 在流水线(Pipeline)上的执行阶段 在哪个功能单元执行(Executed) 是否可以重复执行等
DSP教程 第七章_伪指令和宏语言

ቤተ መጻሕፍቲ ባይዱ 第7章 伪/宏指令和目标链接文件
7.4 目标文件链接
链接器命令文件和链接器伪指令
链接时给符号赋值 ▲ 赋值语句的语法:链接器中赋值语句的语法类似于C语言中赋值语句语法。
符号 = 表达式 符号 += 表达式 符号 -= 表达式 符号 *= 表达式 符号 /= 表达式 ;把表达式的值赋予符号 ;把表达式的值加到符号上 ;从符号减去表达式的值 ;符号乘以表达式 ;符号除以表达式
第7章 伪/宏指令和目标链接文件
7.4 目标文件链接
链接器命令文件和链接器伪指令
例6.24 MEMORY指令举例
/ * Sample Command file with MEMORY directive * / file1.obj file2.obj -o prog.out MEMORY { PAGE0: ROM: ORIGIN=0C00h ,LENGTH=1000h PAGE1: SCRATCH: ORIGIN =60h, LENGTH =20h RAM: ORIGIN =200h, LENGTH =200h }
▲ 把SPC赋予符号“.”:“.”表示定位期间SPC的当前值。“.”符号仅可用
在 SECTIONS伪指令内的赋值语句中,用来表示段的当前运行地址。
第7章 伪/宏指令和目标链接文件
7.4 目标文件链接
链接器命令文件和链接器伪指令
▲ 赋值表达式:链接器表达式必须遵循以下规则: √ 表达式可包含全局符号、常数,以及表8-3-1所列的C语言运算符。 √ 所有数被当做长整数(32位)处理。 √ 链接器用和汇编器相同的方式识别常数。见表8-3-2.
√表达式中的符号只具有符号的地址值,不进行类型检查。
√ 链接器表达式可以是绝对的或可重定位的。
DSP指令集解析

第4章 TMS320C54xTM DSP汇编语言与混合编程 续表一
符号 BITC C16 C CC CMPT CPL cond [d],[D] DAB DAR dmad 说 明 4 位值,用于确定位测试指令对指定 数据存储器的哪一位进行测试 ST1 中的双 16 位/双精度算术模式位 ST0 中的进位位 2 位的条件代码 ST1 中的兼容模式位 ST1 中的编译模式位 条件执行指令所用的条件 延迟方式的选项 地址总线 DAB 地址寄存器 16 位立即数表示的数据存储器地址 (0≤dmad≤65 535) 符号 PAR PC pmad Pmem PMST prog [R] rnd RC RTN REA 说 程序地址寄存器 程序计数器 16 位立即数表示的程序存储器地址 (0≤PA≤65 535) 程序存储器操作数 处理器模式状态寄存器 程序存储器操作数 舍入(凑整)选项 舍入 循环计数器 在 RETF[D]指令中使用的快速返回 寄存器 块循环尾地址寄存器 明
可以增强软件的可读性,提高了软件的开发速度, 方便软件的修
改和移植。然而, C编译器无法实现在任何情况下都能够合理地 利用DSP芯片的各种资源。此外,对DSP芯片的某些硬件控制, 用C语言就不如用汇编程序方便,有些甚至无法用C语言实现。
第4章 TMS320C54xTM DSP汇编语言与混合编程 第二种,用汇编语言开发。此种方式代码效率高,程序执 行速度快,可以充分合理地利用芯片提供的硬件资源。然而, 用汇编语言编写程序比较烦琐,可读性较差。另外,不同类别 或不同公司的芯片汇编语言往往不同,因此可移植性较差。总
相应的格式,这样汇编器才能将源文件转换为机器语言的目标
文件。C54x DSP汇编语言源程序由源说明语句组成,包含汇编
语言指令、汇编伪指令、宏伪指令和注释等,一般一句程序占 据编辑器的一行。由于汇编器每行最多只能读200个字符,因此
DSP指令大全(最全)

DSP指令大全(最全)附录6 TMS320C54x 指令系统一览表(按指令功能排列) 一、算术运算指令二、逻辑运算指令三、程序控制指令6.注:?条件―真‖,§条件―假‖,※延迟指令。
四、加载和存储指令4.6.7.五.伪指令2.初始化常数(数据和存储器)的伪指令3.调整段程序计数器伪指令(SPC).align 把SPC调整到页边界.even 把SPC调整到偶数字边界4.控制输出列表格式化伪指令5.条件汇编伪指令.break [well-defined expression] 如果条件真结束.loop汇编,.break结构是可选项.else 如果.if条件为假,汇编代码块.else结构是可选项.elseif well-defined expression——如果if条件为假且.elseif 条件为真,汇编代码块.else结构是可选项.endif 结束.if代码块.endloop 结束.1oop代码块.if well-defined expression 如果条件为真则汇编代码块.loop [well-defined expression] 开始代码块的重复汇编6. 汇编符号.asg [”] character string [”],substitution symbol——把字符串赋予替代的符号..endstruct 结束结构定义.equ 使值和符号相等.eval well-defined expression,substitution symbol 根据数字替代符号完成运算.newblock 取消局部标号.set 使数值和符号相等.struct 开始结构定义.tag 把结构属性赋予标号7.宏指令宏定义:Macname .macro[参数1],[…],[参数n]宏调用:[标号][:] macname [参数1],[…],[参数n]8.编译软件指令①汇编器:asm500.exeasm500[input file[object file [listing file] [-options]]-c—使汇编语言文件中大小没有区别。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4 .copy, .include .copy, .include告诉编译器从其他文件中读入源语句。 区别在于:.copy读入的源语句将在列表文件中列出, 而.include伪指令读入的不在列表文件中列出。 当汇编器遇到.copy和 .include伪指令时,将停止汇 编当前的源文件语句,而去编译.copy和 .include文件中 的语句,然后继续汇编.copy和 .include后开始的源文件 语句。 5 .data , .text .data是数据段定义伪指令。它告诉汇编器把源代码汇 编到.data段中,且.data成为当前段。该段通常用来存放 数据表或初始化前的变量。 .text:定义.text段中的代码部分,该部分为可执行代 码。.text段是默认段,若汇编开始不指定其他段,就自动 汇编到该段。
4. 当编写具体的应用程序的时候, 用.copy或.include伪指令将I/O寄存器头文 件合中断矢量头文件复制到应用程序中, 形成一个汇编源程序(如delay.asm),再 由汇编器进行汇编后生成一个目标文件 (如delay.obj),最后连接器把该目标文 件和命令文件相连接,生成可执行文件 (如delay.out).
本例中用.usect伪指令定义两个未初始化的命名 段var1和var2。符号ptr和array分别指向var1段和 var2段的第一个字。 dflag指向var1段中50个字块 中的第一个字。
SPC 0000 0000 0000 0001 0001 0065 0002 0000 0003 目标代码 源程序 .text 2003 LACC ptr .usect array .usect 0037 ADD dflag .usect 0065 ADD vec .usect 0000 ADD .global ;汇编到.text段 03h “var1”,1 ;在var1段保留一个字 “var1”,100 ;在var1段保留100个字 037h “var1”,50 dflag ;还在.text段 “var2”,100 ; 在var2段保留100个字 vec ;还在.text段 array ;将array定义为外部符号名
1
五 . 常用的伪指令的讲解: .align
用途:.align伪指令重置短程序计数器(SPC),使 其指向下一个页边界,以保证后面的代码从一个数据页开 始。汇编器将原页中间的未用空间用含NOP指令的字填充, 一直填到该页边界。 例5.1 新的 一页 0000 0004 .byte 4 ;0页:0000~0079H 0080 .align ;从下一页00080H开始 0080 4572 .string “Error” ; “Er” 0081 726F ; “ro” 0082 7200 ; “r” 0100 .align ;从下一页00100H开始 0100 0006 .byte 6
3 .bss 用法: .bss 符号,字长[, 块标志] .bss 该指令表示在RAM中保留空间。 (1)符号是一个必要参数,它指向.bss保留空间 的第一个地址。字长也是必需参数,它是一个绝 对表达式,表示汇编在.bss段内分配多个字。 (2)字长也是必需参数,它是一个绝对表达式, 表示汇编器在.bss段内分配多个字。 (3)块标志是可选参数,如果不指定块标志或指 定为0,则汇编器在当前.bss段SPC处分配空间; 如果块标志为1,则汇编器将检查当前SPC和页边 界之间是否有足够的空间为变量分配,若有就连 续分配,若无就从下页开始分配。
5. 宏定义与子程序的区别:
宏定义 为了简化汇编语言源程序的书写,通常把一些
出现较为频繁的程序段定义为宏指令,当程序需要被 执行时,只需要一条宏调用语句。使用宏指令的优点 在于可以有效的缩短源程序的长度,节省代码占用内 存空间,使得代码易读,同时减少了重复书写引起的 错误。 子程序 是一个程序段,在程序中通过跳转指令调用, 在每次调用的时候,都需要把整个子程序复制到内存 中运行,占用更多的内存空间。
2 .bes 在当前段中保留一个指定数目的位数, 并用0填充。[用位数(n*16)可以保留n个字单 元]。 例5.2 0007 0100 .word 100h, 200h 0008 0200 0009 Res_1 .space 17 000B 000F .word 15 000C Res_2 .bes 20 000E 00BA .byte 0BAh 000F Res_3 .space 7*16
.bss, .data, .text, .sect, .usect;
2.初始化常数伪指令:在当前段中汇编数值。
.bes, .space, .byte, .field, .float, .bfloat, .int .word, .
long, .blong, .string;
3.段程序计数器排列伪指令:使段程序计数器 SPC指向预定的位置(例如页边界)。
连续空间的代码块或数据块。 页:64K的数据存储器可以分为512个数据页,每页的 大小是128字。
3. 输出段:
在SECTIONS伪指令描述的输出文件中定义的段,这
些段被定义好了内容以及怎么被分配。
4.源列表文件:
将源文件进行汇编,在产生目标文件的同时,还可以
产生源列表文件。它是在汇编器对源程序进行汇编后 产生的目标代码和源语句的列表文件。可以优化编译 器输出。
6 .title 用法:.title “字符串” 该伪指令为每一页输出列表文件打印标题(字符串的 内容)。字符串不能超过65个字符,汇编器在随后的页面 中打印出标题。其作用是生成标志符号,方便通过用反汇 编器结合.title所定义字符串来观察生成的*.out文件的代码。 7 .def , .ref , .global .def , .ref, .global 伪指令所指定的符号为全局符号, 这些全局符号可以在外部定义或在外部被引用。 .def指定在当前模块中定义且可以在其他模块中使用 的符号。汇编器将该符号引入符号表。 .ref指定一个或多个在当前模块中使用但在其他模块 中定义的符号。一般与.def定义的符号对应。汇编器将该 符号标记为未定义的外部符号放入目标符号表,由连接器 在连接时处理该符号的定义。 .global同时具备.def , .ref的功能,需要时可代替它们。
.usect执行之后的存储器分布示意图
8.2 .sect用法:
.sect
“段名”
定义初始化命名段。段名必须用引号引起。该段中可包括代码或者数据, 类似于.text和.data。 9 .set伪指令: 用法: 符号 .set 数值 .set定义的符号在符号表中,不能重复定义。在数值表达式中的符号必 需事先定义。用.def或.global可以使用由.set定义的符号被其他模块调用。 例: IMR .set 0004h ; Interrupt Mask Register IFR .set 0006h ; Interrupt Flag Register 10 .byte, .float , .bfloat, .int , .word, .long , .blong, .string, .field 10.1 .byte用法: [标号] .byte 数值1[,数值2,……] .byte指令将一个或者多个8位的值植入当前段的连续字中。数值可以是 常数,表达式,字符串。使用标号的时候,汇编器指向第一个.byte位置。每 个.byte指令可以定义100个设置,若有字符串,则总数值长度不超过200个字 符。例如: 0000 .space 100h*16 0100 strx .byte ”ab”,”c” 0101 … 后面几个指令用法也基本类似,但数据类型不同。
.align, .even;
4.输出列表格式伪指令:控制列表文件的格式。
.drlist, .drnolist, .list, .fcnolist, .length, .width,.list,
.nolist, .mlist, .mnolist, .opinion, .ssnolist, .tab, .title
6. SPC介绍:
汇编器为每个段保留一个独立的程序计数器(SPC),汇
编器从0地址开始处理每一个段,同一个段均按顺序存 放。连接器根据每个段在内存图的最后位置进行再定 位。
二. DSP汇编的工作原理:
1. 汇编编译连接:结合图进行讲述
2. COFF文件格式:Common Object File Format 使用汇编器可以将汇编语言源程序汇编成为目 标文件,用连接器将若干个目标文件连接成一个可 以被TMS320C1X/C2000/C5X芯片执行的可执行文 件。这些目标文件的格式称为通用目标文件格式 COFF。 COFF文件总包括3个默认的段: 文本段(.text):通常包括可执行代码。 数据段(.data):通常包括已初始化的数据。 预留段(.bss):通常保留用于未初始化变量的空间。
8 .sect , .usect - 8.1 .usect用法: 符号名 .usect “段名”,字长[, 块边界] .usect为一个未命名段中的变量保留空间。类似.bss伪 指令(都为保留空间,但.usect可以在内存中任意定义, 而.bss则是独立的)。 (1)符号名指向.usect指定的第一个单元,它代表所预留空 间的变量名。 (2)段名告诉编译器从哪一个命名段开始保留空间。段名放 在双引号内,前8个字符有效。 (3)字长定义了该段保留的字数空间,可以用表达式表示。 (4)块边界为可选项,如果为非0,则改段为分块段。表示 在进行地址分配时,尽量不超过一页,若超过一页时,则从 另一页的边界开始。 用.usect对同一段名重复定义,可以将连续存放在存储器 的若干变量定义在同一个段内。