下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DSP汇编伪指令集讲解,一 相关的概念:,1.伪指令宏指令汇编指令 伪指令: 是在汇编和连接的时候提供控制信息和数据,并不产生目标代码。 宏指令: 用户自己创建的指令,在汇编时将其展开并汇编为对应的目标代码。 汇编指令: 在汇编时将产生一一对应的目标代码。,2.段页 段:目标文件的最小单位称为段,它是在存储器中占有连续空间的代码块或数据块。 页:64K的数据存储器可以分为512个数据页,每页的大小是128字。 3. 输出段: 在SECTIONS伪指令描述的输出文件中定义的段,这些段被定义好了内容以及怎么被分配。 4.源列表文件: 将源文件进行汇编,在产生目标文件的同时,还可以产生源列表文件。它
2、是在汇编器对源程序进行汇编后产生的目标代码和源语句的列表文件。可以优化编译器输出。,5. 宏定义与子程序的区别: 宏定义 为了简化汇编语言源程序的书写,通常把一些出现较为频繁的程序段定义为宏指令,当程序需要被执行时,只需要一条宏调用语句。使用宏指令的优点在于可以有效的缩短源程序的长度,节省代码占用内存空间,使得代码易读,同时减少了重复书写引起的错误。 子程序 是一个程序段,在程序中通过跳转指令调用,在每次调用的时候,都需要把整个子程序复制到内存中运行,占用更多的内存空间。 6. SPC介绍: 汇编器为每个段保留一个独立的程序计数器(SPC),汇编器从0地址开始处理每一个段,同一个段均按顺序存放
3、。连接器根据每个段在内存图的最后位置进行再定位。,二. DSP汇编的工作原理:,1. 汇编编译连接:结合图进行讲述,2. COFF文件格式:Common Object File Format 使用汇编器可以将汇编语言源程序汇编成为目标文件,用连接器将若干个目标文件连接成一个可以被TMS320C1X/C2000/C5X芯片执行的可执行文件。这些目标文件的格式称为通用目标文件格式COFF。 COFF文件总包括3个默认的段: 文本段(.text):通常包括可执行代码。 数据段(.data):通常包括已初始化的数据。 预留段(.bss):通常保留用于未初始化变量的空间。,三. 伪指令的功能,伪指令的功
4、能包括: 1.把代码和数据汇编到指定的段。 2.为未定义的变量保存空间。 3.控制列表文件。 4.分配存储器。 5.汇编条件块。 6.定义全局变量。 7.指定汇编器能得到的宏。 8.检查符号调试信息。,1.段定义伪指令:把汇编程序的各个部分与适当的段(数据块或程序块)联系起来。 .bss, .data, .text, .sect, .usect; 2.初始化常数伪指令:在当前段中汇编数值。 .bes, .space, .byte, .field, .float, .bfloat, .int .word, .long, .blong, .string; 3.段程序计数器排列伪指令:使段程序计数器
5、SPC指向预定的位置(例如页边界)。 .align, .even; 4.输出列表格式伪指令:控制列表文件的格式。 .drlist, .drnolist, .list, .fcnolist, .length, .width,.list, .nolist, .mlist, .mnolist, .opinion, .page, .sslist, .ssnolist, .tab, .title,四. 伪指令的分类,5.引用其他文件伪指令:提供或者获取文件的信息。 .copy, .include, .global, .def, .ref, .mlib; 6.条件汇编伪指令: .if, .elseif,
6、.else, .endif, .loop, .break, .endloop; 7.汇编时的符号伪指令:把自定义的符号等同于常数值或者字符串; .asg, .eval, .set, .equ, .struct, .endstruct, .newblock 8.其他伪指令:.end, .label, .mmregs, .port, .sblock, .version, .emsg, .wmsg;,五. 常用的伪指令的讲解:,1 .align 用途:.align伪指令重置短程序计数器(SPC),使其指向下一个页边界,以保证后面的代码从一个数据页开始。汇编器将原页中间的未用空间用含NOP指令的字填充
7、,一直填到该页边界。 例5.1 00000004.byte4 ;0页:00000079H 0080 .align ;从下一页00080H开始 00804572.string“Error” ; “Er” 0081726F ; “ro” 00827200 ; “r” 0100.align ;从下一页00100H开始 01000006.byte6,新的一页,2 .bes 在当前段中保留一个指定数目的位数,并用0填充。用位数(n*16)可以保留n个字单元。 例5.2 00070100.word 100h, 200h 00080200 0009 Res_1.space 17 000B000F.word
8、15 000C Res_2.bes 20 000E00BA.byte 0BAh 000F Res_3.space 7*16,3 .bss 用法: .bss 符号,字长, 块标志 .bss 该指令表示在RAM中保留空间。 (1)符号是一个必要参数,它指向.bss保留空间的第一个地址。字长也是必需参数,它是一个绝对表达式,表示汇编在.bss段内分配多个字。 (2)字长也是必需参数,它是一个绝对表达式,表示汇编器在.bss段内分配多个字。 (3)块标志是可选参数,如果不指定块标志或指定为0,则汇编器在当前.bss段SPC处分配空间;如果块标志为1,则汇编器将检查当前SPC和页边界之间是否有足够的空间
9、为变量分配,若有就连续分配,若无就从下页开始分配。,4 .copy, .include .copy, .include告诉编译器从其他文件中读入源语句。区别在于:.copy读入的源语句将在列表文件中列出,而.include伪指令读入的不在列表文件中列出。 当汇编器遇到.copy和 .include伪指令时,将停止汇编当前的源文件语句,而去编译.copy和 .include文件中的语句,然后继续汇编.copy和 .include后开始的源文件语句。 5 .data , .text .data是数据段定义伪指令。它告诉汇编器把源代码汇编到.data段中,且.data成为当前段。该段通常用来存放数据
10、表或初始化前的变量。 .text:定义.text段中的代码部分,该部分为可执行代码。.text段是默认段,若汇编开始不指定其他段,就自动汇编到该段。,6 .title 用法:.title “字符串” 该伪指令为每一页输出列表文件打印标题(字符串的内容)。字符串不能超过65个字符,汇编器在随后的页面中打印出标题。其作用是生成标志符号,方便通过用反汇编器结合.title所定义字符串来观察生成的*.out文件的代码。 7 .def , .ref , .global .def , .ref, .global 伪指令所指定的符号为全局符号,这些全局符号可以在外部定义或在外部被引用。 .def指定在当前模
11、块中定义且可以在其他模块中使用的符号。汇编器将该符号引入符号表。 .ref指定一个或多个在当前模块中使用但在其他模块中定义的符号。一般与.def定义的符号对应。汇编器将该符号标记为未定义的外部符号放入目标符号表,由连接器在连接时处理该符号的定义。 .global同时具备.def , .ref的功能,需要时可代替它们。,8 .sect , .usect - 8.1 .usect用法: 符号名 .usect “段名”,字长, 块边界 .usect为一个未命名段中的变量保留空间。类似.bss伪指令(都为保留空间,但.usect可以在内存中任意定义,而.bss则是独立的)。 (1)符号名指向.usec
12、t指定的第一个单元,它代表所预留空间的变量名。 (2)段名告诉编译器从哪一个命名段开始保留空间。段名放在双引号内,前8个字符有效。 (3)字长定义了该段保留的字数空间,可以用表达式表示。 (4)块边界为可选项,如果为非0,则改段为分块段。表示在进行地址分配时,尽量不超过一页,若超过一页时,则从另一页的边界开始。 用.usect对同一段名重复定义,可以将连续存放在存储器的若干变量定义在同一个段内。,本例中用.usect伪指令定义两个未初始化的命名段var1和var2。符号ptr和array分别指向var1段和var2段的第一个字。 dflag指向var1段中50个字块中的第一个字。 SPC 目标
13、代码源程序 0000.text ;汇编到.text段 0000 2003 LACC03h 0000ptr .usect“var1”,1 ;在var1段保留一个字 0001array .usect“var1”,100 ;在var1段保留100个字 0001 0037ADD037h 0065dflag.usect“var1”,50 0002 0065ADD dflag ;还在.text段 0000vec.usect“var2”,100 ; 在var2段保留100个字 00030000ADDvec ;还在.text段 .globalarray ;将array定义为外部符号名,.usect执行之后的存
14、储器分布示意图,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 , .
15、word, .long , .blong, .string, .field 10.1 .byte用法: 标号 .byte 数值1,数值2, .byte指令将一个或者多个8位的值植入当前段的连续字中。数值可以是常数,表达式,字符串。使用标号的时候,汇编器指向第一个.byte位置。每个.byte指令可以定义100个设置,若有字符串,则总数值长度不超过200个字符。例如: 0000.space 100h*16 0100strx.byte”ab”,”c” 0101 后面几个指令用法也基本类似,但数据类型不同。,六.简单的程序设计过程:,在程序设计时,一般来说需要进行规范的文件管理,使得源代码组织清晰易
16、读,有利于交流和加快开发的进度。 1.如果需要在多个模块中使用相同的设置和中断处理,通常将芯片映射到I/O空间的寄存器地址及标号、预置变量和常数的空间等设置语句集中在一个文件中,称为I/O寄存器头文件(如init.h)。 2.将转移中断矢量地址的指令集中在一个文件中,称为中断矢量头文件(如vector.h)。 3.将定义程序,数据和I/O空间地址块大小和位置的伪指令集中在一个文件称为命令文件(如F2407.cmd)。 以上三个合称为公用文件。,4. 当编写具体的应用程序的时候,用.copy或.include伪指令将I/O寄存器头文件合中断矢量头文件复制到应用程序中,形成一个汇编源程序(如del
17、ay.asm),再由汇编器进行汇编后生成一个目标文件(如delay.obj),最后连接器把该目标文件和命令文件相连接,生成可执行文件(如delay.out).,5. 命令文件*.cmd文件的介绍: TMS320系列芯片的存储器配置随应用的不同而不同。用连接器伪指令MEMORY可以确定目标系统的各种内存配置。当MEMORY决定了存储器模式后,可以用连接器伪指令SECTIONS确定连接器组合输入段的方法和输出段在存储器中的位置。,3.1 MEMORY伪指令 确定在目标系统中具有物理位置并且可以被程序使用的存储器范围,该指令并不对存储器进行逻辑配置。 TMS320器件具有独立的程序存储器,数据存储器
18、和I/O存储器空间,连接器允许用户使用MEMORY伪指令的PAGE选项单独配置这些地址空间。,(1)MEMORY的一般格式: MEMORY PAGE0: 存储器名1(属性): ORIGIN = 常数,LENGTH= 常数 . . . PAGEn: 存储器名 n(属性):ORIGIN = 常数,LENGTH= 常数 ,说明: 1.PAGE定义一个存储空间,用户可以定义多达255页。通常默认PAGE0定义程序存储器,PAGE1定义数据存储器。每个PAGE代表一个完全独立的地址空间。在PAGE0上以配置的存储器可以和在PAGE1上已配置的存储器重叠。在同一页中的存储器名不能有相同的名字,且不能重叠。
19、 2. ORIGIN指定存储器区域的起始地址,可以是16位常数、十进制,八进制或者十六进制常数。LENGTH指定存储器的长度。,3.2 SECTIONS伪指令:SECTIONS功能: 1 描述输入段怎样被组合到输出段内; 2 定义在执行程序中的输出段; 3 规定输出段在存储器中的位置; 4 允许重新命名输出段; 格式: SECTIONS 段名1:特性1,特性2, 段名1:特性1,特性2, ,特性列表,3.2.1 SECTIONS伪指令中的特性列表选项有以下几种: (1)装载地址:规定段将被装载在存储器中的位置。 LOAD = allocation 或 allocation 注:allocati
20、on 是MEMORY伪指令所定义的范围 内地址,包括ROM,RAM,实际地址值(16位常数)等. (2)运行地址:定义段在存储器内运行的位置。 RUN = allocation 或 RUN allocation,对上述两个属性的说明: 装载地址和运行地址通常是相同的,此时每个段只具有单个地址。但也有例外,如在基于ROM的系统中,若有性能要求严格的代码必须装入ROM,但是它在RAM中运行的速度会更快。这就需要设置两个地址,用LOAD设置它的装载地址,用RUN设置它的运行地址。,(3)调准地址:规定段应在地址边界上开始。 (4)块地址:规定段必须装载两个地址边界之间,它把段定位在大小为n(2的幂)
21、的块内任何地方。如果段大于块,那么段将从该边界开始。 (5)输入段:定义组成输出段的输入段。 输入文件中的段组合起来形成输出段,连接器按照所列出的输入段的次序连接并结合它们。如果没有输入段说明,连接器将从输入文件中所有的.text , .data, .text段一起组合到对应的默认的输出段中。,(6)段类型:定义特殊段类型的标志。type = COPY 或type = DSECT 或type =NOLOAD COPY和DSECT创建的是一个虚段,它不包括在输出段存储器分配内,也不占据存储器空间,不包括在存储器映象列表中。但虚段中定义的全局符号可以被其他输出段引用。 NOLOAD创建的段不将段的
22、内容,重定位信息及行号信息放在输出模块中。但连接器为其分配空间并包括在存储器映象列表中。 (7)填充值:定义用于填充初始化空位的数值。用.field伪指令填充数据。,一个*.cmd文件的例子,例:F2407.cmd MEMORY PAGE 0: /* PROGRAM MEMORY */ VECS:ORIGIN=0000H,LENGTH=0044H PM:ORIGIN=00100H,LENGTH=7000H PAGE 1: /* DATA MEMORY */ BLK_B2 :ORIGIN=0060H, LENGTH=20H/* Block B2 */ BLK_B0 :ORIGIN=0200H, L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 典型结构受力分析
- 共享单车(英文)
- 《市场品牌建设》课件
- 幼儿园小小班假期安全教育
- 企业人身安全
- 初中生涯规划教育
- 静脉栓塞的预防及护理
- 租赁车辆托运合同
- 品质机能管理最佳实践
- 企业内部客供物料管理办法
- 大学体育与科学健身智慧树知到期末考试答案章节答案2024年温州医科大学
- 24秋国家开放大学《计算机系统与维护》实验1-13参考答案
- 走进民航智慧树知到期末考试答案章节答案2024年中国民航大学
- 邀请函模板完整
- 肢体残疾课件(陈瑞光)
- 中国平安保险公司薪酬体系
- 机械制图基础知识
- 静脉治疗小组工作计划_
- 施工现场临时用电验收记录(新)2页
- 入团志愿书(2016版本)(可编辑打印标准A4)
- (完整word版)北师大版四年级数学上册运算律练习
评论
0/150
提交评论