我目前正在学习ARM,必须将特定的C代码片段转换为ARM代码才能在计算机上进行测试。但是,我不知道如何在ARM中专门声明数组,也找不到解释它的非常相关的资源。

i = 0
while (i < 0xB) {
    x[i] = i*2;
}


提前谢谢了

最佳答案

既然没有这个问题的答案,我将使用GodBolt并在其中输入OP的代码。

我可以自由地格式化给定的代码:

void assign(int num) {
    int x[10];
    int i = 0;
    while(i < 0xB) {
        x[i] = i*2;
    }
}


用于翻译的编译器是ARM​​ gcc 5.4.1

翻译代码:

assign(int):
        str     fp, [sp, #-4]!
        add     fp, sp, #0
        sub     sp, sp, #60
        str     r0, [fp, #-56]
        mov     r3, #0
        str     r3, [fp, #-8]
.L3:
        ldr     r3, [fp, #-8]
        cmp     r3, #10
        bgt     .L4
        ldr     r3, [fp, #-8]
        mov     r2, r3, asl #1
        ldr     r3, [fp, #-8]
        mov     r3, r3, asl #2
        sub     r1, fp, #4
        add     r3, r1, r3
        str     r2, [r3, #-44]
        b       .L3
.L4:
        mov     r0, r0    @ nop
        sub     sp, fp, #0
        ldr     fp, [sp], #4
        bx      lr


资料来源:https://godbolt.org/g/5Tv3gk

10-08 05:59