DSP汇编语言初步资料

合集下载

第3章 汇编语言(2011) DSP

第3章  汇编语言(2011) DSP

symbol: 对应于用户正保留空间的变量名 指向此次被.usect伪指令调用所保留空间的首字节 Size in words:所保留存储空间的长度 Section name: 段名 告诉汇编器保留一定的空间给段命名 (SECTIONS中必须有相应分配)
symbol: 对应于用户正在保留空间的变量名, 指向此次被.bss伪指令调用所保留空间的首字节 Size in words: 所保留存储空间的长度
三、.set和.equ伪指令(符号赋值) 格式: symbol .set value symbol .equ value 功能: .set和.equ伪指令将常数值赋给左边符号 说明:.set和.equ伪指令是等同的,可以互换使用 symbol(符号)必须出现在标号域 value(数值)表达式中的符号必须已在前面定义 (.def或者.global伪指令能使由.set定义的符号成 为外部可见的。采用这种方法,用户可以定义全局绝对 常数。)
第3章 汇编语言
2011/6/5
第3章
汇编语言
第3章
汇编语言
DSP开发环境: CCS 文件扩展名: .out COFF核心:使用代码块和数据块编程 优点: 良好的可读性和可移植性,利于模块化程序设计 缺点: 编译系统复杂,对系统的存储器结构和映射方式非常了解 COFF文件产生过程 : 编译 *.asm *.c 汇编器 *.obj *.cmd 链接 *.out
PAGE 1 PAGE 1
.data : }
2
第3章 汇编语言
2011/6/5
实验中使用的存储器配置
MEMORY { PAGE 0 : VECS:origin = 00000h, length = 00040h CODE: origin = 00100h, length = 01800h PAGE 1 : Regs: origin BLK_B2: origin BLK_B0 : origin BLK_B1: origin = 00000h, length = 00060h = 00060h, length = 00020h = 00200H, length = 00100H = 00300H, length = 00100H

DSP汇编语言编程基础

DSP汇编语言编程基础

实验二 DSP汇编语言编程基础一、 实验目的1、了解DSP的寻址方式;2、了解DSP的汇编语言与C语言混合编程。

二、 实验器材1、安装有CCS的PC机一台;三、 实验内容1、建立一个工程;2、用汇编语言编程实现一个可被C程序调用的例程。

四、 实验步骤1、汇编语言和C语言混合编程:(1) 运行CCS,建立一个工程,取名exp2a,并保存到c:\ti\myprojects\xxx\Experiment2\目录下。

(2) 编辑如下C文件,取名exp2a.c并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。

/* Assembly routine */extern int sum(int *);/* define x[] as global array */int x[2]={0x1234,0x4321};/* define result s as global variable */int s;void main(){s = sum (x); /* return sum product */}(3) 编辑如下汇编文件,取名exp2_sum.asm并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。

* * * * * * * * * * * * * * * * * * * * * * * * * * * * ** exp2_sum.asm SUM subroutine* called by exp2a.c* Input: Array pointer* Output: Return sum result in T0* * * * * * * * * * * * * * * * * * * * * * * * * * * * *.global _sum_summov *AR0+,AC0 ; AC0 = x[1]add *AR0+,AC0 ; AC0 = x[1]+x[2]mov AC0,T0ret ; Return T0.end(4) 编辑如下链接命令文件,取名link.cmd并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。

第五章 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.3 宏指令
• 为了简化汇编语言程序的书写,常把一些频繁出现的程序段定义为宏指令
• 当程序需要执行这一段程序段时只要一条宏调用语句 ,减少汇编语言程序的重复书写
• TMS320系列DSP汇编器支持宏例指1 令
(1)宏定义
宏定义:
(2)宏调用 举例
parms
.macro x, y, z
LACC
x
• 这类伪指令使汇编器根据表达式 求值结果的真或假来汇编代码的某 些段。
• 伪指令分为8类。 1)段定义伪指令 2)初始化常数伪指令 3)段程序计数器排列伪指令 4)输出列表格式伪指令 5)引用其他文件伪指令 6)条件汇编伪指令 7)汇编时的符号伪指令 8)其他伪指令
• 该类伪指令使定义的符号名等同于 常数值或字符串
例 .set .equ .struct .endstruct
• 常用的伪指令
• 定义标题伪指令 .title 句法: .title “字符串” 例: .title “example
• 终止源程序汇编伪指令 .end
• 赋值伪指令 .set 和 .equ 句法: 符号 .set 数值 符号 .equ 数值 例: DAC0 .set 0001h
• 伪指令分为8类。 1)段定义伪指令 2)初始化常数伪指令 3)段程序计数器排列伪指令 4)输出列表格式伪指令 5)引用其他文件伪指令 6)条件汇编伪指令 7)汇编时的符号伪指令 8)其他伪指令
•该类伪指令为文件提供信息或提供这 些文件的信息。
• 伪指令分为8类。 1)段定义伪指令 2)初始化常数伪指令 3)段程序计数器排列伪指令 4)输出列表格式伪指令 5)引用其他文件伪指令 6)条件汇编伪指令 7)汇编时的符号伪指令 8)其他伪指令

DSP技术与应用_线性汇编语言简介

DSP技术与应用_线性汇编语言简介
所传递的参数
C代码转换为线性汇编
• 第二步:暂时存放临时数据的寄存器定名, 由.reg ( register)完成
.reg
addr_a,addr_x
.reg
m,n
.reg
product,sum
C代码转换为线性汇编• 第三步, Nhomakorabea据初始化
MV MV ZERO
cptr0,addr_a cptr1,addr_x sum
unit operands;comments
(3)[condition]条件
A 如果指令没有指出条件,指令总被执行;
B 如果给定条件,当条件为真,指令执行;
C 如果给定条件,当条件为假,指令不执行。
如[A1]
A1!=0 A1=0
[!A1]
A1=0 A1!=0
汇编代码结构
Label: parallel bars [condition] instruction unit operands;comments

.reg
m,n

MV
cptr0,addr_a

MV
cptr1,addr_x

ZERO sum0

ZERO sum1

SHR
vptr,1,vptr

loop:

LDW
*addr_a++,m

LDW
*addr_x++,n

MPY
m,n,product0

MPYH m,n,product1

ADD
sum0,product0,sum0
.reg
product,sum

DSP 课件 第六章 汇编语言

DSP 课件 第六章 汇编语言
.word 016h
;将2装入DP
;初始化一个字为16h
1、标号域
标号包含1~32个字母、数字、字符(A~Z,a~2,0~9,—及$),可识别符号的 大小写,且规定第一个字符不能是数字。 标号可以后随冒号(:),冒号并不作为标号的一部分被处理。 如果不使用标号,则第一个字必须是空格或分号或星号。
当选用标号时,其值是段程序计数器 (SPC)的当前值,标号指向与它们相关联的 语句。例如,如果用.word伪指令初始化几个字,那么标号将指向第一个字。
(2)已初始化块
已初始化块包含可执行代码或已初始化数据。块的内容存储在目标 文件中,当程序装入时存放在DSP存储器中。每个已初始化块可以独立 地进行重定位,且可访问在其他块中定义的符号。链接器可自动解决块 与块之间符号访问的问题。有四个命令通知汇编器将代码或数据存放在 严格块中,格式为: .text .data .sect “块名” .asect “块名”,地址 上述命令中, .text 和 .data建立的块名就是.text 和 .data,而后两 命令建立的是自定义块,其中.asect 建立的块有绝对地址,一般不建议 使用。
2、字符串
字符串是包含在双引号内的一串字符,双引号是字符串的一部分。串的 最大长度是变化的,并由每一个使用字符串的伪指令定义。字符在内部 被表示为8位ASCII字符,如:“sample program”定义13个字符的字符 串sample program。 字符串用于下列场合:
(1).copy “filename”中的文件名;
6.3 通用目标文件格式
CCS开发环境可以看成是一个大的软件包,里面包含了源代码 编辑器,以及工程文件组织、编译和调试等一切功能模块。该软件 包里,shell程序可以完成3个功能:编译、汇编和链接。shell程序 缺省在C盘安装时,被安装在 C:\ti\c2400\cgtool子目录下,对应的 文件名为dspcl.exe。 (1)编辑器:包括分析器、优化器、代码产生器。把C语言程序编译 成汇编语言程序。 (2)汇编器:把汇编语言源代码或 C语言已经编译成汇编语言代码进 行汇编,以产生COFF目标文件。 (3)链接器:将文件链接,产生可执行的目标文件。

第五章DSP汇编语言开发

第五章DSP汇编语言开发

三、COFF文件 汇编器和连接器建立的目标文件,是可以在C54x DSP器件上执行的文件。这些目标文件的格式称为公共目 标文件格式COFF (Common Object File Format )文件。 汇编器建立的是一种相对地址的COFF文件。汇编器根 据汇编命令用适当的段将各部分程序代码和数据连在一起, 构成目标文件。 连接器建立的是一种绝对地址的COFF文件。连接器建 立COFF文件时,要把各部分程序代码和数据段重新定位到 目标存储器中,也就是为各个程序代码或数据分配存储单 元。
③. 自定义段 自定义段,由用户定义的段,和默认的段.text .data .bss 的使用完全相同,而且独立分配,但是自定义段单独被汇 编,不和.text.data .bss混在一起。.usect和.bss类似,.sect 和与.data和.text类似。 语法格式如下: 标号 .usect “段名”,字数 .sect “段名” .asect “段名” ,地址
子段可以单独为其分配存储单元,或在基段之后。
⑤、段程序计数器(SPC)
汇编器为每个段都安排一个单独的程序计数器——段 程序计数器(SPC)。SPC表示一个程序代码段或数据段 内的当前地址。连接器在连接时对每个段进行重新定位。 汇编开始时,汇编器将每个SPC置0。当汇编器将程序 代码或数据加到一个段内时,相应的SPC就增加。如果再 继续对某个段汇编,则相应的SPC就在先前的数值上继续 增加。连接器在连接时要对每个段进行重新定位。
例5-2: 汇编源程序经汇编后的列表文件(段命令的应用):
该例中一共建立了5个段: .text段: 段内有10个字的程序代码。 .data段: 段内有7个字的数据。 vectors段: 是一个用.sect建立的自定义段,段 内有2个字的已初始化数据。 .bss段: 在存储器中为变量保留了10个存储 单元。 newvars段: 用.usect建立的自定义段,在存储器 B y .def x

第9讲 DSP的C及汇编语言

第9讲  DSP的C及汇编语言

OnFileLoaded()函数
GEL文件—回调函数
该回调函数在加载program/symbol(.out)文件之后执行。 可以建立调试源搜索路径(在没有CCS工程文件的时候), 设定断点和探针,完成软件的复位和重启。
GEL文件—回调函数
OnReset()函数
当目标处理器复位后该函数被调用。如果你需要每次重
无论用哪种方法定义中断服务函数,都须注意以下问题:
(1)中断处理函数必须是void类型,而且不能有任何
输入参数。
(2)进入中断服务函数,编译器将自动产生程序保护 所有必要的寄存器,并在中断服务函数结束时恢复运行 环境。 (3)进入中断服务函数,编译器只保护与运行上下文 相关的寄存器,而不是保护所有的寄存器。中断服务函 数可以任意修改不被保护的寄存器,如外设控制寄存器 等。 (4)要注意IMR、INTM等中断控制量的设置。通常 进入中断服务程序要设置相应寄存器将中断屏蔽,退出 中断服务程序时再打开,避免中断嵌套。
需要注意的问题
(2)指针类型转换是必须的,关系到接收分配 好的内存块的地址可以向前看多少字节。 如果不做指针类型转换会怎么样? void * 指针存在的意义。
需要注意的问题
(3)内存块大小的可移植性问题
分配一个整型变量数组应使用: 数组元素个数 * sizeof(int) 确定内存块的大小 问题:sizeof和strlen函数的区别
/*进行CCS存储器映射,告知目标处理器哪些空间可以访问,哪些不可以访问。*/
Setup_Memory_Map( ); } OnTargetConnect( )//对处理器进行最小初始化 { Setup_Cache( ); //设置缓存L1P,L1D,L2 Setup_Pin_Mux( ); // 设置管脚 Setup_Psc_All_On( ); // 设置psc Setup_PLL0_594_MHz_OscIn( ); // 设置dsp主频[DSP @ 594 MHz][Core 1.20V] Setup_PLL1_DDR_135_MHz_OscIn();//设置ddr时钟频率 Setup_Aemif_8Bit_Bus( ); // 设置Async-EMIF[8-bit bus] }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言初步
目的:用汇编语言编写简单程序
BIT/TI
第四讲 汇编语言初步
1
学习内容
• 汇编代码的结构 • 汇编程序的构成 • 编写简单算法:y = mx+b
BIT/TI
第四讲 汇编语言初步
2
一、汇编代码的构成
label: || [cond] instruction .unit operand ;comment
BIT/TI 第四讲 汇编语言初步 20
例程2:乘加运算汇编程序
BIT/TI
第四讲 汇编语言初步
第四讲 汇编语言初步 4
二、汇编程序的构成
程序=数据结构+算法
C程序的数据结构和算法实现
数据结构
算法
BIT/TI
第四讲 汇编语言初步
5
汇编程序-数据结构
用汇编语言声明数据结构
: : : :
BIT/TI
第四讲 汇编语言初步
6
汇编程序-算法
用汇编语言编写算法


BIT/TI 第四讲 汇编语言初步 7
功能单元(可选) 操作数: • 寄存器 • 常量 • 指针 条件寄存器
注释
标号:代码或 变量地址 x .int 10 MPY .M1 A1, A3, A7 || ADD .L1x A2, B2, A5
BIT/TI 第四讲 汇编语言初步
指令: • 助记符(mnemonic) • 伪指令(directive)
完整的汇编程序构成
m: x: b: y:
.sect “myData” .int 5 .int 10 .int 2 .int 0
BIT/TI
.sect “myCode” start: LD .D1 *A0,A1 . . . ST .D1 A7,*A6 end: B end NOP 5
第四讲 汇编语言初步
MVK/ MVKL把一个16位常数放入寄存器
BIT/TI
第四讲 汇编语言初步
12
1b.取数据
LDH .D1 LDH .D1 LDH .D1 NOP
BIT/TI
*A0, A1 *A2, A3 *A4, A5 4
第四讲 汇编语言初步
; 取m ; 取x ; 取b
13
LD/ST指令
• 三种Load指令,对应不同长度的数据 – LDW 取32位字(word) – LDH 取16位的半字(short) 数据取入寄存器 – LDB 取8位字节(byte) 后进行符号扩展 • 对无符号数(字节、16位半字) – LDBU 无符号扩展 – LDHU • 指令延迟:四个延迟间隙 • 三个存储指令 – STW – STH – STB
BIT/TI
第四讲 汇编语言初步
9
三、用汇编指令编写y=mx+b
1.数据取入寄存器:m,x,b存储器->寄存器
1a. 初始化数据指针 1b. 取数据
2.乘法 3.加法 4.存储数据:y寄存器->存储器
BIT/TI
第四讲 汇编语言初步
10
1a.指针初始化
32位常量 MVK .S1 MVKH.S1 MVK .S1 MVKH.S1 MVK .S1 MVKH.S1
.L1
.S1
.D1
或 ADD .?
BIT/TI

A5, A7, A7
第四讲 汇编语言初步 18
4.存储结果
BIT/TI
第四讲 汇编语言初步
19
完整的y=mx+b汇编程序
.title "lab4.asm" mvk .s1 y,A6 ; A6=&y /*定义数据结构*/ mvkh .s1 y,A6 .sect "myData” /*取数据*/ m .short 10 ldh .d1 *A0,A1 ; A1= m x .short 5 ldh .d1 *A2,A3 ; A3=x b .short 2 ldh .d1 *A4,A5 ; A5=b y .short 0 nop 4 /*算法*/ /*核心算法*/ .sect "myCode" start: mpy .m1 A1,A3,A7 ; A7=mx /*指针初始化*/ nop 1 init: mvk .s1 m,A0 ;A0=&m add .l1 A5,A7,A7 ; A7=mx+b mvkh .s1 m,A0 sth .d1 A7,*A6 mvk .s1 x,A2 ;A2=&x /*结束循环*/ mvkh .s1 x,A2 b$ ; endless loop mvk .s1 b,A4 ;A4=&b nop 5 mvkh .s1 b,A4
BIT/TI 第四讲 汇编语言初步 14
指令延迟间隙
延迟间隙:多周期指令所需要插入的NOP指令个数
BIT/TI
第四讲 汇编语言初步
15
2.乘法
MPY .M1 A1, A3, A7 NOP
BIT/TI
第四讲 汇编语言初步
16
乘法指令
• 四种乘法指令
– MPY(U/US/SU) 16LSB×16LSB
– MPYH(U/US/SU)
– MPYH(U/S)L(U/S) – MPYL(U/S)H(U/S) 16LSB×16MSB • 指令延迟槽:1
16MSB×16MSB
16MSB×16LSB
• 两个乘法单元可以在一个周期内做两次乘法
BIT/TI 第四讲 汇编语言初步 17
3.加法
ADD.? 应该使用哪个功能单元?
BIT/TI
m, A0 m, A0 x, A2 x, A2 b, A4 b, A4
第四讲 汇编语言初步
; &m->A0 ; &x->A2
; &b->A4
11
指令MVK
MVK/MVKL - Move a Signed Constant into a Register and Sign-Extend (~C64x)
3
常用伪指令
汇编指令 .sect .usect .int .long .word .short .half .byte 说明 定义一个代码段或数据段 定义一个未初始化数据段 定义和初始化32位变量 定义和初始化16位变量 定义和初始化8位变量
注意
BIT/TI
在C语言里long是40Байду номын сангаас,在汇编语言里long是32位
8
搬移指令
搬移指令共有3类:MV, MVC, MVK:
MV指令用于在通用寄存器之间传送数据。 MVC指令用于在通用寄存器与控制寄存器之 间传送数据,此条指令只能使用.S2功能单元. MVK类指令用于把16位常数送入通用寄存器。 在C6000指令集内,只能往寄存器送16位常数, 可选择MVK 、MVKH或MVKL指令向寄存 器的高16位送数。
相关文档
最新文档