《《DSP器件与应用》汇编语言伪指令和目标代码生成》由会员分享,可在线阅读,更多相关《《DSP器件与应用》汇编语言伪指令和目标代码生成(85页珍藏版)》请在金锄头文库上搜索。
1、DSP器件与具体应用 汇编语言伪指令和目标代码的生成 7 1 1宏汇编语言伪指令 汇编伪指令 用于预设变量 参数 控制程序汇编过程 简化程序编辑 提高程序的可读性 只在程序汇编过程中有效 并不能实际执行 由汇编器进行控制和计算 1 段定义伪指令 初始化段 text data sect sectionname asect sectionname address非初始化段 bsssymbol sizeinwords blockingflag Symbol usect sectionname sizeinwords blockingflag text text定义代码段 用于代码段开始前 给汇编器和
2、链接器以说明如果还没有代码汇编到 text段 SPC为0 如果原来已有代码汇编到 text段 SPC重载原来的值举例 textAdcproc clrcsxm 从此段开始处放置一个子程序Adcprog data data定义数据段 用于数据段开始前 给汇编器和链接器以说明 data段可以包含代码 但通常是初始化的数据变量举例 data word0abcdh 01234h 9876 从此段开始处定义三个常数 sect sect sectionname 定义初始化了的命名段 其后的源码将汇编到此段以便以后以此名调用 sect var defs word17 18 Startassemblingint
3、oanamed initialized section var defs asect asect sectionname 地址指定有名初始化段地址 为绝对地址代码 数据段均可举例 asect dataout 02000h bss bsssymbol sizeinWORDS blockingflag 定义非初始化变量空间 为未初始化变量保留若干字空间symbol指向保留空间的第一个字 可作为变量名blockingflag非0 则保留空间将不会跨越页边界举例 bsssym 19 Reservespacein bss word15 16 usect Symbol usect sectionname
4、sizeinwords blockingflag 定义非初始化有名变量空间 为该名称的段保留若干字空间举例 usym usect xy 20 Reservespaceinxy 举例 2 初始化常数伪指令 在当前段保留若干位空间 bessizeinbits或 spacesizeinbits在当前段连续定义一个或多个字节 bytevalue1 valuen 将数值置入当前字的特定数量的位中 fieldvalue sizeinbits 定义32bit IEEE单精度浮点常数 注意不要越过页界 floatvalue 或 bfloatvalue 定义一个或多个32bit值 注意不要越过页界 longva
5、lue1 valuen 或 blongvalue1 valuen 定义一个或多个16 bit整数 intvalue1 valuen wordvalue1 valuen 定义一个或多个字符串 string string1 stringn space bes 4500070100 word100h 200h00080200460009Res 1 space1747000B000F word1548000CRes 2 bes2049000E00BA byte0BAh 定义常数 10000aa byte0AAh 0BBh0001bb20002cccc word0CCCCh30003dddd int0D
6、DDDh40004ffff long0EEEEFFFFh0005eeee500066865 string help 00076c7060008ffa8 float1 9999900093fff 3 安置段程序计数器 AligntheSectionProgramCounter SPC align 将SPC设置在页边界上 even 将SPC设置在字边界上 4 设置列表输出格式伪指令 5 引用说明伪指令 copy filename 包含其他源文件 相当于把目标文件内容纳入本程序文件中 mlib filename 定义宏库 功能类似 copy include filename 包含其他源文件 同 co
7、py defsymbol1 symboln 说明在当前模块中定义 可被其他模块调用的一个或多个模块 子程序 符号 globalsymbol1 symboln 说明一个或多个全局符号 外部 refsymbol1 symboln 说明在当前模块中要调用 而在其他模块中定义的一个或多个模块 子程序 符号 6 条件汇编伪指令 ifwell definedexpression 若 if条件为真 则汇编相应代码块 elseifwell definedexpression 若 if条件为假且 elseif条件为真 则汇编相应代码块 elseif为可选 else 若以上条件为假 则汇编相应代码块 else为可
8、选 endif 终止 if代码块 loop well definedexpression 定义重复汇编 若条件成立 代码块的块首 break well definedexpression 若条件为真 退出 loop循环 break为可选 endloop 结束 loop代码块 7 汇编时符 asg characterstring 给符号指定字符串 该符号代表相应的字符串 set或 equ 符号等于某数值 evalexpression symbol 计算表达式 将其值转换成字符 并将该字符串赋予给一个符号 newblock 取消局部标号 struct 结构定义开始 类似C endstruct 结构
9、定义结束 tag 给结构分配一个标号表示 8 其它伪指令 end 程序结束 终止汇编 labelsymbol 定义特定符号代表当前段中的装入地址 mmregs 说明存储器映射寄存器符号以便程序使用 port 打开汇编器端接口开关 sblock sectionname sectionname 给一个或多个模块指明段 若模块不超出1页 则在页内安放 否则起新页 versiongeneration number 设置处理器版本 emsgstring 发送用户定义的错误信息到输出设备 mmsgstring 发送用户定义的汇编信息到输出设备 wmsgstring 发送用户定义的警告信息到输出设备 9 宏
10、汇编 定义宏 macname macro parameter1 parametern macname为宏名 parameter1 n为参数 mexit 退出到宏结束 endm endm 宏定义结束 varsubstitutionsymbol 1 n 定义宏内临时局部符号 相当于临时变量 为了多次调用宏 可用label 格式定义标号 addx macroa vartmp asg a 1 tmp if symcmp tmp 0addka elseif symcmp tmp 0adda else emsg BadMacroParameter endif endmaddx 100 macrocalla
11、ddx macrocall MIN macroa blaccasubbbcndm1 NClaccbbm2 不能用 mexit伪指令代替m1 laccam2 endm OperatorsinExpressions 在 C2xxDSP中 当在表达式中为了便于表达算式含义或避免运算次序混淆时 可使用 但不能使用 和 Expressions1 Expressions2 表达式举例 8 4 2 4 but8 4 2 18 4 2 10 4 2isevaluatedfirst 8 4 2 4 but8 4 2 1xyz equ1234W equ5678 textlarar2 w xyz 7 1 2链接控制
12、命令文件 CMD文件 可执行目标文件的生成 1 编辑源程序文件 ASM C LIB2 编译成目标文件 OBJ3 生成可执行文件 OBJ LIB CMD OUT 目标代码的存储器定位 目标程序代码和数据在存储器中的位置定位绝对定位 在源程序中直接访问固定物理地址链接时可重定位 在链接过程中确定代码和数据在存储器中的位置代码和数据在存储器中的定位以段 section 为定位基本单元段定位受控于链接命令控制文件 cmd文件 常见的段 ASM语言初始化段 text data未初始化段 bss编程者命名段C语言初始化段 text cinit switch const未初始化段 bss sack syst
13、em 编程者命名 Cmd文件组成 链接参数列表 oxxx out mxxx map输入文件 OBJ LIB 列表Xxx objAaa obj 存储器资源MEMORY 段定位SECTIONS Syntax MEMORYdirective 决定用于安置输出模块的存储器 格式如下 MEMORY PAGE0 name1 attr origin constant length constant PAGEn namen attr origin constant length constant attr Rspecifiesthatthememorycanberead Wspecifiesthattheme
14、morycanbewrittento Xspecifiesthatthememorycancontainexecutablecode Ispecifiesthatthememorycanbeinitialized MEMORYDirective举例 SECTIONS 输入模块如何组合成输出模块定义用于生成可执行程序的输出模块指定输出模块在可执行程序中的定位 相互关系和整个存储器定位 允许输出块重命名 语法 SECTIONS name property property property name property property property name property property
15、 property Possibleproperties Loadallocation whichdefineswhereinmemorythesectionistobeloadedSyntax load allocationorallocationor allocation Runallocation whichdefineswhereinmemorythesectionistoberunSyntax run allocationorrun allocation Inputsections whichdefinestheinputsectionsthatconstitutetheoutput
16、sectionSyntax input sections cmd文件格式 Title c203 cmd Genericcommandfileforlinking TMS320C2xxassemblerfiles inputfiles objfiles ooutputfiles outfile mMapfiles mapfile optional TMS320C2xxarchitecture declarationforlinkeruse MEMORY PAGE0 PM Programmemory EX1 PM ORIGIN 0H LENGTH 0FEFFH ExternalprogramRAM B0 PM ORIGIN 0FF00H LENGTH 0100H BLOCKMAPINCNF 1 PAGE1 DM Datamemory REGS ORIGIN 0H LENGTH 60H M MREGS BLK B2 ORIGIN 60H LENGTH 20H B2 BLK B0 ORIGIN 200H LENGTH 100H B0 BLK B1 ORIGIN 300H LENGTH 100H