汇编伪指令是汇编语言程序设计中的一项重要内容,它给程序提供数据并控制汇编过程。伪指令会对汇编起某种控制作用,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式均可以作为参数。汇编伪指令主要完成以下工作:
1)将数据和代码汇编进指定的段。
2)控制产生清单文件。
4)汇编条件代码块。
5)声明全局变量。
6)在存储器中为未初始化的变量保存空间。
7)为汇编器指定库。
伪指令和它所带的参数必须书写在一行。除了汇编伪指令,TMS320C54x汇编语言还支持以下的伪指令:
1)声明全局变量。
2)在存储器中为未初始化的变量保存空间。
3)为汇编器指定库。
下面分别对一些常用的伪指令进行介绍,其他伪指令的详细说明请参考TIDSP技术手册“TMS320C54x Assembly Language Tools User’sGuide”。常用的汇编伪指令见表5-1。
表5-1 常用的汇编伪指令
1.段定义伪指令
段定义伪指令指定汇编程序的段(有关段的知识请参考5.5.1节COFF文件中的段),它们包括:
①.bss。用于为未初始化的段预留空间。
②.data。用于指定后续的代码为数据段,通常包含初始化的数据。
③.sect。用于自命名的初始化段,通常包含可执行代码和数据。
④.text。用于指定后续的代码为文本段,通常包含可执行代码。
⑤.usect。用于为未初始化的命名段预留空间。
【例5-4】 段定义伪指令示例。
2.初始化常数伪指令
初始化常数伪指令可以在当前段内指定常数值:
①.byte、.ubyte、.char。这些伪指令用于指定数值用8位表示,并将其连续存储在当前段。
②.float和.xfloat。用于指定数值用单精度(32位)IEEE浮点表示,并将其存储在当前段的连续两个字中,先存最高有效位。.float存储时会自动对准长字边界,.xfloat不会。
③.int、.uint、.half、.short、.ushort、.word、.uword。这些伪指令用于指定数值用16位表示,并将其连续存储在当前段。
④.long、.ulong、.xlong。这些伪指令用于指定数值用32位表示,并将其存储在当前段中2个连续的字中。.long和.ulong存储时会自动对准长字边界,.xlong不会。
⑤.double和.ldouble。用于指定数值用双精度(32位)IEEE浮点表示。
⑥.bes和.space。用于在当前段预留指定的存储空间。
【例5-5】 初始化常数伪指令示例。
(www.xing528.com)
有一些伪指令可以指定当前段在内存中地址对齐:
①.align。用于指定起始位置对准在1~128字的边界。操作数为1表示对准到字边界;操作数为2表示对准到长字/双字边界;操作数为128表示对准到页边界。
②.even。用于指定起始位置对准到下一个字的边界。它等效于.align伪指令的操作数为1;使用.even操作数为2时,表示对齐到下一个长字的边界。
任何在当前字中没有使用的位都填充0。
4.输出列表格式伪指令
输出列表格式伪指令可以指定格式化的清单列表文件输出:
①.length。用于控制清单列表文件页面的长度。
②.page。用于控制清单列表文件中加入新页。
③.tab。用于定义制表键(tab)的长度。
④.title。用于控制在清单列表文件每页顶部打印标题。
⑤.list和.nolist。用于控制打开或关闭清单列表文件的输出。
⑥.option。用于控制清单列表的某些功能,该伪指令有以下操作数:
A:允许列出所有的伪指令和数据,并展开宏和循环。
B:将.byte伪指令的列表限制在一行。
D:将伪指令的列表限制在一行,关闭某些伪指令的列出。
H:将.half.short伪指令的列表限制在一行。
L:将.long伪指令的列表限制在一行。
M;关闭宏扩展的列出。
N:关闭清单列表文件的输出。
O:打开清单列表文件的输出。
R:复位选项。
X:产生符号交叉引用清单。
5.文件引用伪指令
文件引用伪指令可以引用其他文件中的信息:
①.copy和.include。用于指定从其他文件读取源代码程序语句。
②.def。用于指定在当前文件中定义但可被其他文件中引用的符号。
③.global。用于指定符号为全局符号。
④.ref。用于指定在当前文件中使用但在其他文件中定义的符号。
6.条件汇编伪指令
条件汇编伪指令用于指示对某些代码按照表达式的计算结果,决定是否对其汇编。有两组伪指令用于条件汇编:
①.if、.elseif、.else、.endif。这些语句用于通知汇编器按照表达式的计算结果,对某段代码块进行条件汇编。
②.loop、.break、.endloop。这些语句用于通知汇编器按照表达式的计算结果重复汇编一个代码块。要求表达式和伪指令必须完全在同一行指定。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。