Hexagon Binutils GNU 手册(7)

240 篇文章 11 订阅


接上一章2.6.11

2.6 Directives

2.6.12 .common

.common symbol, length [,align] [,access] 
.comm symbol, length [,align] [,access]

声明一个名为符号的公共符号。在链接时,一个对象文件中的公共符号可以与另一个对象文件中的同名定义或公共符号合并。如果链接器没有看到该符号的定义,只是看到一个或多个公共符号,那么它将分配长度字节的未初始化内存。长度必须是一个绝对表达式。如果链接器看到多个具有相同名称的公共符号,而它们的大小不尽相同,它将使用最大的大小分配空间。
可选的align参数指定了符号的期望对齐方式,用字节边界表示(例如,16的对齐方式意味着地址中最没有意义的4位应该是0)。对齐必须是一个绝对表达式,而且必须是2的整数倍。如果链接器为公共符号分配了未初始化的内存,它将在放置符号时使用该对齐方式。默认的对齐方式是小于或等于符号大小的最大2次方,最大为16。
可选的访问参数指定了对符号进行的最小内存访问的大小,以字节为单位(例如,2的值意味着最小的内存访问将是16位)。默认值是对齐参数所指定的值。
注意 -G选项(第2.2.2.6节)决定了.common是将符号分配到处理器全局bss部分(第2.4.3节)还是标准bss部分。
两种拼法(.comm和.common)都可以作为指令名接受。

2.6.13 .3byte

.data subsection

将以下语句组合到数据小节的末尾,编号为
subsection(这是一个绝对表达式)。如果省略了subsection,则默认为0。

2.6.14 .desc

.desc symbol, abs-expr

将符号所表示的描述符属性(第2.5.7.6节)设为
指定的绝对表达式的低16位。
注意
他的属性不被汇编者使用。

2.6.15 .double

.double [flonum [,flonum]...]

生成指定的flonums(第2.3.6节)作为64位浮点数存储在
连续的地址中。
接受由逗号分隔的零个或多个flonums。

2.6.16 .eject

.eject

在生成汇编列表时,在这一点上强制中断页面。

2.6.17 .else

.else

标记一段代码的开始,只有当前面的.if的条件被评估为false时才会被装配。
注意 该指令支持条件装配(第2.6.35节)。

2.6.18 .elseif

.elseif abs-expr

标记一个新的有条件的代码部分的开始,只有当前面的.if的条件被评估为false时才会装配。条件参数必须是一个绝对表达式。
注意 该指令支持条件装配(第2.6.35节)。

2.6.19 .end

.end

标记一个程序源文件的结束。汇编器不会处理文件中超过.end指令的任何内容。

2.6.20 .endif

.endif

标记代码的条件部分的结束。
注意 该指令支持条件装配(第2.6.35节)。

2.6.21 .endm

.endm

标记用.macro指令声明的宏定义的结束。参见第2.6.45节。

2.6.22 .endr

.endr

标记由.rept指令处理的源行序列的结束。参见第2.6.56节。

2.6.23 .equ

.equ symbol, expr

将符号的值设置为表达式。相当于.set(第2.6.59节)。

2.6.24 .equiv

.equiv symbol, expr

与.equ和.set类似(第2.6.59节),但如果符号已经被定义,汇编器将发出错误信号。
符号已经被定义。
除了错误信息的内容外,这大致等同于以下内容
的指令序列:
1.ifdef SYM
2.err
3.endif
4.equ SYM,VAL

2.6.25 .err

.err

打印一条错误信息,并且(除非使用了-Z选项)不生成一个对象文件。这可以用来在有条件编译的代码中发出错误信号。

2.6.26 .exitm

.exitm

从.macro指令中执行提前退出。参见第2.6.45节。

2.6.27 .falign

.falign

确保下面的指令包不跨越4个字(16字节)的边界,用NOP指令填充前面指令包中的任何空位。如果无法做到这一点,就用一个完全由NOP指令组成的新指令包来填充当前位置(在当前小节)。
这条指令通常用于跳转目标或循环体的顶部。
注意 不能在含有".align "指令的语句(第2.3.10节)上定义任何标签。
.falign指令。如果有必要,可以在指令之后定义一个标签。
如果处理器分支到一个数据包跨越128位边界的目标,由此产生的指令获取将停滞一个周期(因此.falign中的 “f”)。详情见《Hexagon程序员参考手册》。

2.6.28 .file

.file fileno filename

将文件名分配给.debug_line文件名表。
fileno是一个正整数,用于指定文件名表中一个条目的索引。该值必须是唯一的,与程序中出现的该指令的其他实例所指定的值不同。
filename是一个C语言字符串字面。
注意
该指令仅在生成DWARF 2调试信息时有效(2.2.2.6节)。更多信息见www.dwarfstd.org。
文件名索引会暴露给用户,因为文件名表与DWARF 2调试信息的.debug_info部分共享。因此用户必须知道表项的确切索引。

2.6.29 .fill

.fill repeat, size, value

在连续的地址中生成大小字节的重复拷贝。
result、size和value是绝对表达式。 repeat可以是零或更多。size可以是零或更多,但如果它超过8,那么就被认为是8的值,与其他人的汇编程序兼容。每个重复字节的内容取自一个8字节的数字。最高阶的4个字节是0。最低阶的4个字节是在汇编器所汇编的计算机上以整数的字节顺序呈现的值。重复中的每个大小字节都是从这个数字的最低阶大小字节中提取的。同样,这种奇怪的行为与其他人的汇编器是兼容的。
size和value是可选的。如果第二个逗号和value不存在,value就被假定为零。如果第一个逗号和后面的令牌不存在,则假定size为1。

2.6.30 .float


.float [flonum [,flonum]...]

生成指定的flonums(第2.3.6节)作为32位浮点数存储在
连续的地址中。
接受由逗号分隔的零个或多个flonums。
注意.float等同于.single(第2.6.61节)。

2.6.31 .global


.global symbol 
.globl symbol

使指定的符号对链接器可见。如果你在你的部分程序中定义了符号,它的值将被提供给与它链接的其他部分程序。否则,符号会从链接到同一程序的另一个文件的同名符号中获取其属性。
注意 两种拼写方式(.globl和.global)都可以作为指令名接受。

2.6.32 .half

.half [expr [,expr]...]

将指定的表达式生成为存储在连续地址中的16位数据项。接受由逗号分隔的零个或多个表达式。
注意.half等同于.hword(第2.6.34节)。

2.6.33 .hidden

.hidden symbol [,symbol]...

将指定符号的可见性属性设置为隐藏值。
这覆盖了默认的符号可见性(这是由符号绑定设置的)。
隐藏的符号对其他组件是不可见的。它们也总是被认为是被保护的。
注意 参见.内部(第2.6.38节)和.保护(第2.6.51节)。

2.6.34 .hword

.hword [expr [,expr]...]

将指定的表达式生成为存储在连续地址中的16位数据项。接受由逗号分隔的零个或多个表达式。
注意 .hword等同于.short(第2.6.60节)。

2.6.35 .if

.if abs-expr 
.ifdef symbol 
.ifndef symbol 
.ifnotdef symbol

标记代码的条件部分的开始,只有当指定的绝对表达式评估为非零值时才会装配。条件代码部分的结束由.endif标记(第2.6.20节)。你可以选择包括替代条件的条件代码,用.else(第2.6.17节)来标记。如果必须检查几个条件,可以使用.elseif(第2.6.18节)来避免在每个后续的.else块中嵌套.if/.else块。
以下是.if的变体,也被支持:

.ifdef symbol

如果指定的符号已被定义,则组装以下部分的代码。

.ifndef symbol
.ifnotdef symbol

如果指定的符号没有被定义,则组装以下部分的代码。
两种拼写方式都是等同的。

2.6.36 .include

.include "filename"

在源程序的当前位置包含指定文本文件的内容。
文件名中的代码被组装起来,就像它跟在.include的点后面一样;当到达被包含文件的末端时,继续组装原始文件。你可以用-I命令行选项来控制使用的搜索路径(第2.2.2.2节)。
文件名周围需要加引号。

2.6.37 .int

.int [expr [,expr]...]

将指定的表达式生成为存储在连续地址中的32位数字。接受由逗号分隔的零个或多个表达式。
注意.int等同于.word(第2.6.77节)。

2.6.38 .internal

.internal symbol [,symbol]...

将指定符号的可见性属性设置为内部值。
这覆盖了默认的符号可见性(这是由符号绑定设置的)。
内部符号被认为是隐藏的,需要对它们进行额外的处理。
注意 参见.hidden(第2.6.33节)和.protected(第2.6.51节)。

2.6.39 .irp

.irp symbol, values...

评估一连串的语句,为符号分配不同的值。语句序列从.irp指令开始,并由.endr指令结束。对于每个值,符号被设置为值,并且语句序列被组装起来。如果没有列出任何值,语句序列将被组装一次,符号被设置为空字符串。要在语句序列中指代符号,请使用 \symbol。
例如,组装:

.irp    param,1,2,3
             move    d\param,sp@-
             .endr

相当于组装了

move    d1,sp@-
             move    d2,sp@-
             move    d3,sp@-

***注意***符号可以定义为任何标识符,包括通常在指令语法中保留使用的符号。在某些情况下,这可能导致指令扩展不能按预期工作–更多信息见第2.6.6节。

2.6.40 .irpc

.irp symbol, values...

评估一连串的语句,为符号分配不同的值。语句序列从.irpc指令开始,并以.endr指令结束。对于值中的每个字符,符号被设置为该字符,并且语句序列被组装起来。如果没有列出值,则语句序列被组装一次,符号被设置为空字符串。要在语句序列中指代符号,请使用 符号(symbol)。
例如,组装:

.irpc    param,123
             move    d\param,sp@-
             .endr

相当于组装了

move    d1,sp@-
             move    d2,sp@-
             move    d3,sp@-

***注意***符号可以定义为任何标识符,包括通常在指令语法中保留使用的符号。在某些情况下,这可能导致指令扩展不能按预期工作–更多信息见第2.6.6节。
未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值