版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DSP汇编伪指令集讲解一一 相关的概念:相关的概念:v1.伪指令伪指令宏指令宏指令汇编指令汇编指令伪指令伪指令:v是在汇编和连接的时候提供控制信息和数据,并不产生目标代码。宏指令宏指令:v用户自己创建的指令,在汇编时将其展开并汇编为对应的目标代码。汇编指令汇编指令:v在汇编时将产生一一对应的目标代码。v2.段段页页段段:目标文件的最小单位称为段,它是在存储器中占有连续空间的代码块或数据块。页:页:64K的数据存储器可以分为512个数据页,每页的大小是128字。v3. 输出段:输出段:在SECTIONS伪指令描述的输出文件中定义的段,这些段被定义好了内容以及怎么被分配。v4.源列表文件:源列表文
2、件:将源文件进行汇编,在产生目标文件的同时,还可以产生源列表文件。它是在汇编器对源程序进行汇编后产生的目标代码和源语句的列表文件。可以优化编译器输出。v5. 宏定义与子程序的区别:宏定义与子程序的区别:宏定义宏定义 为了简化汇编语言源程序的书写,通常把一些出现较为频繁的程序段定义为宏指令,当程序需要被执行时,只需要一条宏调用语句。使用宏指令的优点在于可以有效的缩短源程序的长度,节省代码占用内存空间,使得代码易读,同时减少了重复书写引起的错误。子程序子程序 是一个程序段,在程序中通过跳转指令调用,在每次调用的时候,都需要把整个子程序复制到内存中运行,占用更多的内存空间。v6. SPC介绍介绍:汇
3、编器为每个段保留一个独立的程序计数器(SPC),汇编器从0地址开始处理每一个段,同一个段均按顺序存放。连接器根据每个段在内存图的最后位置进行再定位。二二. DSP汇编的工作原理:汇编的工作原理:1. 汇编编译连接:结合图进行讲述2. COFF文件格式文件格式:Common Object File Format 使用汇编器可以将汇编语言源程序汇编成为目标文件,用连接器将若干个目标文件连接成一个可以被TMS320C1X/C2000/C5X芯片执行的可执行文件。这些目标文件的格式称为通用目标文件格式COFF。COFF文件总包括3个默认的段:文本段(.text):通常包括可执行代码。数据段(.data
4、):通常包括已初始化的数据。预留段(.bss):通常保留用于未初始化变量的空间。三三. 伪指令的功能伪指令的功能伪指令的功能包括:伪指令的功能包括:v1.把代码和数据汇编到指定的段。v2.为未定义的变量保存空间。v3.控制列表文件。v4.分配存储器。v5.汇编条件块。v6.定义全局变量。v7.指定汇编器能得到的宏。v8.检查符号调试信息。v1.段定义伪指令:把汇编程序的各个部分与适当的段(数据块或程序块)联系起来。.bss, .data, .text, .sect, .usect;v2.初始化常数伪指令:在当前段中汇编数值。.bes, .space, .byte, .field, .float
5、, .bfloat, .int .word, .long, .blong, .string;v3.段程序计数器排列伪指令:使段程序计数器SPC指向预定的位置(例如页边界)。.align, .even;v4.输出列表格式伪指令:控制列表文件的格式。.drlist, .drnolist, .list, .fcnolist, .length, .width,.list, .nolist, .mlist, .mnolist, .opinion, .page, .sslist, .ssnolist, .tab, .title四四. 伪指令的分类伪指令的分类v5.引用其他文件伪指令:提供或者获取文件的信息
6、。v.copy, .include, .global, .def, .ref, .mlib; v6.条件汇编伪指令:v.if, .elseif, .else, .endif, .loop, .break, v.endloop;v7.汇编时的符号伪指令:把自定义的符号等同于常数值或者字符串;v.asg, .eval, .set, .equ, .struct, .endstruct,v .newblockv8.其他伪指令:.end, .label, .mmregs, .port, .sblock, v.version, .emsg, .wmsg;五五. 常用的伪指令的讲解常用的伪指令的讲解:v1
7、.alignv用途:用途:.align伪指令重置短程序计数器(SPC),使其指向下一个页边界,以保证后面的代码从一个数据页开始。汇编器将原页中间的未用空间用含NOP指令的字填充,一直填到该页边界。v例5.1 v00000004 .byte4 ;0页:00000079Hv0080 .align ;从下一页00080H开始v00804572 .string “Error” ; “Er”v0081726F ; “ro”v00827200 ; “r”v0100.align ;从下一页00100H开始v01000006 .byte6新的一页v2 .bes 在当前段中保留一个指定数目的位数,并用0填充。用
8、位数(n*16)可以保留n个字单元。v例5.2v00070100.word 100h, 200hv00080200v0009 Res_1.space 17v000B000F.word 15v000C Res_2.bes 20v000E00BA.byte 0BAhv000F Res_3.space 7*16v3 .bssv 用法: .bss 符号,字长符号,字长, 块标志块标志v.bss 该指令表示在RAM中保留空间。v(1)符号是一个必要参数,它指向.bss保留空间的第一个地址。字长也是必需参数,它是一个绝对表达式,表示汇编在.bss段内分配多个字。v(2)字长也是必需参数,它是一个绝对表达式
9、,表示汇编器在.bss段内分配多个字。v(3)块标志是可选参数,如果不指定块标志或指定为0,则汇编器在当前.bss段SPC处分配空间;如果块标志为1,则汇编器将检查当前SPC和页边界之间是否有足够的空间为变量分配,若有就连续分配,若无就从下页开始分配。v4 .copy, .include.copy, .include告诉编译器从其他文件中读入源语句。区别在于:.copy读入的源语句将在列表文件中列出,而.include伪指令读入的不在列表文件中列出。当汇编器遇到.copy和和 .include伪指令时,将停止汇编当前的源文件语句,而去编译.copy和和 .include文件中的语句,然后继续汇
10、编.copy和和 .include后开始的源文件语句。v5 .data , .text.data是数据段定义伪指令。它告诉汇编器把源代码汇编到.data段中,且.data成为当前段。该段通常用来存放数据表或初始化前的变量。 .text:定义.text段中的代码部分,该部分为可执行代码。.text段是默认段,若汇编开始不指定其他段,就自动汇编到该段。v6 .title 用法:用法:.title “字符串字符串” 该伪指令为每一页输出列表文件打印标题(字符串的内容)。字符串不能超过65个字符,汇编器在随后的页面中打印出标题。其作用是生成标志符号,方便通过用反汇编器结合.title所所定义字符串来观
11、察生成的*.out文件的代码。v7 .def , .ref , .global .def , .ref, .global 伪指令所指定的符号为全局符号,这些全局符号可以在外部定义或在外部被引用。.def指定在当前模块中定义且可以在其他模块中使用的符号。汇编器将该符号引入符号表。.ref指定一个或多个在当前模块中使用但在其他模块中定义的符号。一般与.def定义的符号对应。汇编器将该符号标记为未定义的外部符号放入目标符号表,由连接器在连接时处理该符号的定义。.global同时具备.def , .ref的功能,需要时可代替它们。v8 .sect , .usect - 8.1 .usect用法: 符号
12、名符号名 .usect “段名段名”,字长,字长, 块边界块边界 .usect为一个未命名段中的变量保留空间。类似.bss伪指令(都为保留空间,但.usect可以在内存中任意定义,而.bss则是独立的)。(1)符号名符号名指向.usect指定的第一个单元,它代表所预留空间的变量名。(2)段名段名告诉编译器从哪一个命名段开始保留空间。段名放在双引号内,前8个字符有效。(3)字长字长定义了该段保留的字数空间,可以用表达式表示。(4)块边界块边界为可选项,如果为非0,则改段为分块段。表示在进行地址分配时,尽量不超过一页,若超过一页时,则从另一页的边界开始。 用.usect对同一段名重复定义,可以将连
13、续存放在存储器的若干变量定义在同一个段内。v本例中用.usect伪指令定义两个未初始化的命名段var1和var2。符号ptr和array分别指向var1段和var2段的第一个字。 dflag指向var1段中50个字块中的第一个字。vSPC 目标代码源程序v0000.text ;汇编到.text段v0000 2003 LACC03hv0000ptr .usect“var1”,1 ;在var1段保留一个字v0001array .usect“var1”,100 ;在var1段保留100个字v0001 0037ADD037hv0065dflag.usect“var1”,50v0002 0065ADD
14、dflag ;还在.text段v0000vec.usect“var2”,100 ; 在var2段保留100个字v00030000ADDvec ;还在.text段v .globalarray ;将array定义为外部符号名.usect执行之后的存储器分布示意图8.2 .sect用法用法: .sect“段名段名”定义初始化命名段。段名必须用引号引起。该段中可包括代码或者数据,类似于.text和.data。v9.set伪指令:伪指令:用法:用法: 符号符号 .set 数值数值 .set定义的符号在符号表中,不能重复定义。在数值表达式中的符号必需事先定义。用.def或.global可以使用由.set定
15、义的符号被其他模块调用。 例: IMR .set 0004h ; Interrupt Mask Register IFR .set 0006h ; Interrupt Flag Registerv10 .byte, .float , .bfloat, .int , .word, .long , .blong, .string, .field10.1 .byte用法:用法: 标号标号 .byte 数值数值1,数值,数值2,.byte指令将一个或者多个8位的值植入当前段的连续字中。数值可以是常数,表达式,字符串。使用标号的时候,汇编器指向第一个.byte位置。每个.byte指令可以定义100个设置
16、,若有字符串,则总数值长度不超过200个字符。例如:0000.space 100h*160100strx.byte”ab”,”c”0101后面几个指令用法也基本类似,但数据类型不同。六六.简单的程序设计过程:简单的程序设计过程: 在程序设计时,一般来说需要进行规范的文件管理,使得源代码组织清晰易读,有利于交流和加快开发的进度。v1.如果需要在多个模块中使用相同的设置和中断处理,通常将芯片映射到I/O空间的寄存器地址及标号、预置变量和常数的空间等设置语句集中在一个文件中,称为I/O寄存器头文件寄存器头文件(如init.h)。v2.将转移中断矢量地址的指令集中在一个文件中,称为中断矢量头文件(如v
17、ector.h)。v3.将定义程序,数据和I/O空间地址块大小和位置的伪指令集中在一个文件称为命令文件(如F2407.cmd)。以上三个合称为公用文件。v4. 当编写具体的应用程序的时候,用.copy或.include伪指令将I/O寄存器头文件合中断矢量头文件复制到应用程序中,形成一个汇编源程序(如delay.asm),再由汇编器进行汇编后生成一个目标文件(如delay.obj),最后连接器把该目标文件和命令文件相连接,生成可执行文件(如delay.out).5. 命令文件*.cmd文件的介绍:TMS320系列芯片的存储器配置随应用的不同而不同。用连接器伪指令MEMORY可以确定目标系统的各种
18、内存配置。当MEMORY决定了存储器模式后,可以用连接器伪指令SECTIONS确定连接器组合输入段的方法和输出段在存储器中的位置。v3.1 MEMORY伪指令确定在目标系统中具有物理位置并且可以被程序使用的存储器范围,该指令并不对存储器进行逻辑配置。TMS320器件具有独立的程序存储器,数据存储器和I/O存储器空间,连接器允许用户使用MEMORY伪指令的PAGE选项单独配置这些地址空间。(1)MEMORY的一般格式:MEMORYPAGE0: 存储器名1(属性): ORIGIN = 常数,LENGTH= 常数.PAGEn: 存储器名 n(属性):ORIGIN = 常数,LENGTH= 常数v说明
19、:1.PAGE定义一个存储空间,用户可以定义多达255页。通常默认PAGE0定义程序存储器,PAGE1定义数据存储器。每个PAGE代表一个完全独立的地址空间。在PAGE0上以配置的存储器可以和在PAGE1上已配置的存储器重叠。在同一页中的存储器名不能有相同的名字,且不能重叠。2. ORIGIN指定存储器区域的起始地址,可以是16位常数、十进制,八进制或者十六进制常数。LENGTH指定存储器的长度。v3.2 SECTIONS伪指令:SECTIONS功能:v1 描述输入段怎样被组合到输出段内;v2 定义在执行程序中的输出段;v3 规定输出段在存储器中的位置;v4 允许重新命名输出段;v格式:SEC
20、TIONS段名1:特性1,特性2,段名1:特性1,特性2,特性列表v3.2.1 SECTIONS伪指令中的特性列表选项有以下几种:(1)装载地址:规定段将被装载在存储器中的位置。 LOAD = allocation 或 allocation注:allocation 是MEMORY伪指令所定义的范围 内地址,包括ROM,RAM,实际地址值(16位常数)等.(2)运行地址:定义段在存储器内运行的位置。 RUN = allocation 或 RUN allocationv对上述两个属性的说明: 装载地址装载地址和运行地址运行地址通常是相同的,此时每个段只具有单个地址。但也有例外,如在基于ROM的系统
21、中,若有性能要求严格的代码必须装入ROM,但是它在RAM中运行的速度会更快。这就需要设置两个地址,用LOAD设置它的装载地址,用RUN设置它的运行地址。(3)调准地址:规定段应在地址边界上开始。(4)块地址:规定段必须装载两个地址边界之间,它把段定位在大小为n(2的幂)的块内任何地方。如果段大于块,那么段将从该边界开始。(5)输入段:定义组成输出段的输入段。 输入文件中的段组合起来形成输出段,连接器按照所列出的输入段的次序连接并结合它们。如果没有输入段说明,连接器将从输入文件中所有的.text , .data, .text段一起组合到对应的默认的输出段中。(6)段类型:定义特殊段类型的标志。t
22、ype = COPY 或type = DSECT 或type =NOLOADCOPY和DSECT创建的是一个虚段,它不包括在输出段存储器分配内,也不占据存储器空间,不包括在存储器映象列表中。但虚段中定义的全局符号可以被其他输出段引用。NOLOAD创建的段不将段的内容,重定位信息及行号信息放在输出模块中。但连接器为其分配空间并包括在存储器映象列表中。(7)填充值:定义用于填充初始化空位的数值。用.field伪指令填充数据。一个*.cmd文件的例子v例:F2407.cmdMEMORY 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客户需求分析与服务方案框架
- (新教材)2026年部编人教版三年级下册语文 第六单元《口语交际:应该怎样安排座位》教学课件
- 电子健康档案管理服务承诺书8篇
- 提升客户服务质量与态度承诺书(8篇)
- 护理礼仪与医疗评价
- 供应链关键组件缺货风险管理计划
- 项目管理成本控制及效果评估工具
- 2025 八年级地理下册三江源地区生态保护志愿者激励机制课件
- 2025 八年级地理下册北方地区农业面源污染监测课件
- 财务信息数据准确完备承诺书5篇
- 手册大全-禅道使用手册
- 2023年云南省中考地理真题及参考答案
- 小学道德与法治学科教师专业素质考试试题及答案
- 工业园区66kv变电所毕业设计
- 大班社会活动协商分工好
- GB/T 5976-2006钢丝绳夹
- DZ∕T 0388-2021 矿区地下水监测规范
- ISO45001职业健康安全管理体系培训
- 五段式作文教学课件
- 计算机硬盘认识课件
- 仪表施工技术交底
评论
0/150
提交评论