.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