.word 是 GNU 汇编器中的一个数据定义伪指令,用于在汇编代码中定义和分配内存空间。
基于文档内容的解释
1. 基本语法格式
.word expression1[, expression2, ...]
或
.word expression1, expression2, expression3
2. 功能说明
- 在当前段中分配一个字(word)大小的内存空间
- 在 ARM 架构中,一个字通常是 4 字节(32 位)
- 用指定的表达式(值)初始化这个内存位置
- 可以一次定义多个连续的字
3. 数据类型和大小
| 伪指令 | 大小 | 位数 | 说明 |
|---|---|---|---|
.byte |
1 字节 | 8 位 | 定义一个字节 |
.hword |
2 字节 | 16 位 | 定义一个半字(ARM 中常用) |
.word |
4 字节 | 32 位 | 定义一个完整的字 |
.dword |
8 字节 | 64 位 | 定义一个双字 |
.quad |
8 字节 | 64 位 | 定义一个四字(同 .dword) |
4. 使用示例
4.1 定义单个值
# 定义一个32位的值
my_value:
.word 0x12345678
# 使用标号引用
data_start:
.word 0xDEADBEEF
# 定义负数
negative_value:
.word -1
4.2 定义多个连续值
# 定义数组
array:
.word 1, 2, 3, 4, 5
# 定义字符串的ASCII码
hello_chars:
.word 0x48, 0x65, 0x6C, 0x6C, 0x6F # "Hello"
4.3 使用表达式
# 使用算术表达式
calculated:
.word 10 + 20 * 3
# 使用符号表达式
symbol_value:
.word symbol_name
# 使用当前地址
current_addr:
.word . # 存储当前位置的地址
4.4 在向量表中的使用
# ARM Cortex-M 向量表
.section .isr_vector, "a", %progbits
.word _estack # 初始栈指针
.word Reset_Handler # 复位向量
.word NMI_Handler # NMI 处理程序
.word HardFault_Handler # 硬件错误处理程序
.word MemManage_Handler # 内存管理错误
.word BusFault_Handler # 总线错误
.word UsageFault_Handler # 用法错误
5. 对齐和存储
5.1 自动对齐
# 通常需要对齐到4字节边界
.align 2
data:
.word 0x12345678
5.2 未对齐的情况
# 如果没有对齐,汇编器可能会插入填充
.byte 0xAA # 1字节
.word 0x12345678 # 可能需要填充3字节才能对齐
6. 在 ARM 汇编中的特殊用途
6.1 加载大立即数
# 通过内存加载大立即数
ldr r0, =0x12345678 # 汇编器会创建一个字并生成LDR指令
# 等价于
ldr r0, value
value: .word 0x12345678
6.2 跳转表
# 跳转表实现
jump_table:
.word case_0
.word case_1
.word case_2
.word case_3
