Hexagon Binutils GNU 手册(6)

240 篇文章 11 订阅

2.6 Directives

汇编器指令是源文件中的项目,汇编器将其识别为命令。指令被用来声明部分、常量、数据和符号。它们还可以控制汇编器的功能,如宏和包含文件。
指令以一个句号(.)开始,后面可以跟一个或多个参数。句号后不能出现空格。
比如说:

.set debug, 1
          .if debug

汇编器可以识别下列指令。
Sections
1.章节名称
2.章节名称[, “标志”[,类型]] .文本小节
3.数据分节
Symbols
1.equ 符号,expr
2.set 符号, expr
3.equiv 符号,expr
4.global 符号
5.globl 符号
6.common symbol, length [,align] [,access] .comm symbol, length [,align] [, access] .irp symbol, values…
7.irpc符号,值…
8.lcommon 符号,长度 [,对齐] [,访问] .lcomm 符号,长度 [,对齐] [,访问] .symver name, name2@nodename
9.symver name, name2@@nodename
10.symver name, name2@@nodename
11.reloc offset, reloc_name [, expr]。
Symbol attributes
1.size 符号,expr
2.type符号,类型
3.desc 符号,abs-expr
4.隐藏符号[,符号]… .内部符号[,符号]… .保护符号[,符号]…
Alignment
1.org new-lc, fill
2.align[wl] abs-expr [,abs-expr] [,abs-expr].
3.balign[wl] abs-expr [,abs-expr] [,abs-expr] 4.p2align[wl] abs-expr [,abs-expr] [,abs-expr]。
5.falign
Data allocation
1.byte [expr [,expr]…
2.2byte [expr [,expr]…
3.3字节 [expr [,expr]…
4.4字节 [expr [,expr]…
5.word [expr [,expr]…
6.hword [expr [,expr]…
7.半数 [expr [,expr]…
8.short [expr [,expr]…
9.int [expr [,expr]…
10.long [expr [,expr]…
11.octa [bignum [,bignum]… .四[bignum [,bignum]…] .单倍 [flonum [,flonum]… .双数 [flonum [,flonum]…] 。.float [flonum [,flonum]… .ascii [“string” [, “string”]… .asciz [“字符串”[, “字符串”]…] .fill 重复, size, value
12.空格大小, 填充
13.跳过大小, 填充
14.block size, fill
15.string “string” [, “string”]… .string8 “string” [, “string”]… 16.string16 “string” [, “string”]… .string32 “string” [, “string”]… 17.string64 “string” [, “string”]…
Conditionals
1.if abs-expr
2.ifdef symbol
3.ifndef symbol
4.ifnotdef symbol
5.else
6.elseif
7 .endif
Macros
1.macro name
2.macro name argument… .endm
.exitm
3.purgem
4.altmacro
.no5altmacro
Include files
1.include “filename”
Debug
1.file fileno filename
2.loc fileno lineno [column] [options] .stabd type, other, desc
3.stabn type, other, desc, value
4.stabs string, type, other, desc, value .uleb128 expr [,expr]…
5.sleb128 expr [,expr]…
Assembler control
1.end
2.abort
3.err
4.eject
5.rept [count] .endr
Listings
1.list
2.nolist
3.title “heading”
4.sbttl “subheading”
5.psize lines, columns

2.6.1 .2byte

.2byte [expr [,expr]...]

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

2.6.2 .3byte

.3byte [expr [,expr]...]

将指定的表达式生成为存储在连续地址中的3字节数据项。接受由逗号分隔的零个或多个表达式。

2.6.3 .4byte

.4byte [expr [,expr]...]

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

2.6.4 .abort

.abort

停止装配并退出装配程序。

2.6.5 .align

.align abs-expr [,abs-expr] [,abs-expr]

将位置计数器(在当前分节中)向前推进,直到它是指定表达式值的整数倍。例如,’.align 8’使位置计数器前进,直到它是8的整数倍。
注意
如果当前的位置计数器已经是目标值的整数倍,那么这条指令不做任何事情。
第一个参数(必须是一个绝对表达式)是用字节表示的对齐请求值。这个值必须是2的整数倍,并且不应该超过0x3FFFF。
第二个参数(也是一个绝对表达式)指定了要存储在填充字节中的填充值。如果这个参数被省略,填充字节通常为零,但在文本部分,空间被NOP指令填充。
第三个参数(也是一个绝对表达式)指定了这个对齐指令所要跳过的最大字节数。如果执行对齐指令需要跳过的字节数超过指定值,那么就不执行对齐指令。
注意
第二个参数可以省略,在第一个和第三个参数之间加两个逗号。如果你想在适当的时候用NOP指令来填充对齐方式,这可能很有用。
.align等同于.balign(第2.6.9节)。

2.6.6 .altmacro

.altmacro

在宏处理器中启用下列附加功能(第2.6.45节)。
1.本地名称
2.字符串定界符
3.单字符字符串转义
4.作为字符串的表达式结果
5.字符定界符
这些功能在下面有详细的描述。
注意
可以用.noaltmacro指令(第2.6.46节)来禁用这些附加功能。
这个指令等同于使用–alternate选项(第2.2.2节)。
特殊符号’.'可以用来指定汇编器正在汇编的当前地址。比如说:
Local names

LOCAL name [,name]

LOCAL指令使汇编者(在宏扩展中)用一个独特的汇编者生成的名称来替换每个指定名称的实例。特别是,在每个宏扩展中生成的名称是不同的。这使得在宏中定义符号成为可能,而不必担心产生重复的符号定义。该指令接受一个或多个用逗号分隔的名称。
String delimiters
字符串可以用三种方式划界(而不是通常的一种:
1.“字符串”(双引号定界符–默认值)
2. “string”(单引号定界)。
3.(角括号定界)。
Single-character string escape
任何字符(无论其正常含义如何)都可以通过在字符串前加上’!’(感叹号)而插入。
例如,字符串

<4.2 !> 3.4!!>

产生以下字面意义的文本

<4.2 > 3.4!!>

Expression results as strings
‘%expr’对表达式expr进行评估,并将表达式的结果编码为一个字符串。
Character delimiters
安培符(’&’)可以作为一个分隔符,在宏扩展中被删除。这在宏定义使用汇编语言中具有特殊含义的符号的情况下很有用,否则会妨碍宏的正常扩展。
例如,给定的宏

.altmacro
            .macro label l
            l&:
            .endm

the macro call

label my_label

生成以下文字:

my_label:

而不至于让编译器误认为 "1: “这个字符串本身是一个标签,而不是一个在”: "后面的宏参数。宏参数后的’:’。

2.6.7 .ascii

.ascii ["string" [,"string"]...]

生成指定的字符串字元(没有自动尾随的零字节)作为字符
数据项存储在连续的地址中。
接受由逗号分隔的零个或多个字符串字元(2.3.7节)。

2.6.8 .asciz

与.ascii相同,只是每个字符串后面都有一个零字节。

.asciz ["string" [,"string"]...]

注意
.asciz中的 "z "代表 “零”。

2.6.9 .balign

.balign[wl] abs-expr [,abs-expr] [,abs-expr]

将位置计数器(在当前分节中)向前推进,直到它是指定表达式的值的整数倍。例如,’.balign 8’使位置计数器前进,直到它是8的整数倍。
注意 如果当前的位置计数器已经是目标值的整数倍,那么这条指令就没有任何作用。
第一个参数(必须是一个绝对表达式)是用字节表示的对齐请求值。这个值必须是2的整数倍,并且不应该超过0x3FFFF。
第二个参数(也是一个绝对表达式)指定了要存储在填充字节中的填充值。如果这个参数被省略,填充字节通常为零,但在文本部分,空间被NOP指令填充。
第三个参数(也是一个绝对表达式)指定了这个对齐指令所要跳过的最大字节数。如果执行对齐指令需要跳过的字节数超过指定值,那么就不执行对齐指令。

.balignw and .balignl are variants of .balign:.balignw treats the fill pattern as a two-byte word value
■ .balignl treats the fill pattern as a four-byte longword value

例如,.balignw 4,0x368d对准的是4的倍数。
用单个值0x368d来填充。如果它跳过1或3个字节,则填充值未被定义。
注意 第二个参数可以省略,在第一个和第三个参数之间加两个逗号。如果你想在适当的时候用NOP指令来填充对齐方式,这可能很有用。

2.6.10 .block

.block size, fill

在连续的地址中生成大小字节,每个字节的值为fill。
size和fill都是绝对表达式。如果省略了逗号和fill,fill被认为是零。
.block等同于.space(第2.6.65节)。

2.6.11 .byte

.byte [expr [,expr]...]

将指定的表达式生成为存储在连续地址中的1字节数据项。接受由逗号分隔的零个或多个表达式。
后续未完

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值