首页 > 解决方案 > 如何使 .equ 指令全局化,以便可以在其他文件中使用?

问题描述

作为一个玩具项目,我正在构建一些项目,只使用 ARM64。我有一个名为pairs.s 的文件,其中包含某种结构/类的实现,我有一个名为pairs_size 的.equ 指令,它定义了该类的大小,我想在另一个.s 文件中使用该类,所以在哪里pair 类在另一个类中使用,所以我需要在编译时通过添加两个类的大小来计算该类的大小:

这是pairs.s:

.global     pairs_ctor
.global     pairs_ctor_dynamic

.equ        constant_power_pair_size,               16
.equ        constant_power_pair_power_offset,       0
.equ        constant_power_pair_constant_offset,    8

that is the .equ I would like to use in another file
**.equ        pairs_size,                         40**
.equ        pairs_pairs_offset,                 0
.equ        pairs_count_offset,                 8
.equ        pairs_capacity_offset,              16
.equ        pairs_single_power_offset,          24
.equ        pairs_single_constant_offset,       32

//        pairs*  pairs_ctor_dynamic();
pairs_ctor_dynamic:
    stp     x29, x30, [sp, -16]!
    stp     d0, d1, [sp, -16]!
    mov     x0, pairs_size
    bl      malloc
    ldp     d0, d1, [sp], 16
    ldp     x29, x30, [sp], 16
//        void    pairs_ctor(_ x0 : pairs*, _ d0 : power, _ d1 : constant);
pairs_ctor:
    add     x1, x0, pairs_single_power_offset
    str     x1, [x0, pairs_pairs_offset]
    mov     x1, 1
    stp     x1, x1, [x0, pairs_count_offset] // count = capacity = 1
    str     d0, [x0, pairs_single_power_offset]
    str     d1, [x0, pairs_single_constant_offset]
    ret

另一个文件是例如ASTX.s:

ASTX_vtable:
    .quad ASTX_evaluate
    .quad ASTX_derivative
    .quad ASTX_toString

// unfortunately that line doesn't compile! 
**.equ    ASTX_size,  16+pairs_size**

标签: assemblyarm64gnu-assembler

解决方案


推荐阅读