c - 如何将 C 中带有数组的 while 循环转换为 ARM

标签 c assembly arm

我目前正在学习 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

关于c - 如何将 C 中带有数组的 while 循环转换为 ARM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43723980/

相关文章:

linux - 对于微型程序,链接后最小的可执行文件大小现在比 2 年前大 10 倍?

assembly - 为什么 "Procedure Call Standard for the ARM Architecture"(AAPCS) 要求 SP 8 字节对齐?

linux - ARM assembly 中的原子比较和交换

c - 从队列中删除节点

c# - .NET 中的已检查和未检查异常

C: printf(带 fork())

c - Flex/Bison 多遍类解析

c - 为什么mulss在Haswell上只需要3个周期,而不是Agner的指令表? (使用多个累加器展开FP循环)

assembly - 是否可以仅使用移位和旋转进行乘法运算?

无法解析符号 '__aeabi_d2iz'