【问题标题】:How to convert while loop with arrays in C to ARM如何将带有 C 中数组的 while 循环转换为 ARM
【发布时间】:2017-05-01 18:03:17
【问题描述】:

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

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

在此先感谢

【问题讨论】:

  • ARM 有 C。
  • 我在网上没有找到任何用ARM语言表示数组的方法..
  • 如果您想查看您的 C 代码翻译成的 ARM 代码,请使用编译器。如果您尝试自己进行翻译,那么您将需要更多的帮助,而不仅仅是如何声明一个数组。
  • “我不知道如何声明数组由于互联网上缺乏信息。” - 你在开玩笑吧?你的老师也应该给你所有的信息。如果没有,请他改进课程材料。
  • @EugeneSh.:看到了吗?帮助人们在考试中作弊是一个非常糟糕的主意。你想让一个同事永久要求做他的工作吗?让我们希望导师知道堆栈溢出。不会是第一次因为作弊而考试失败。

标签: c assembly arm


【解决方案1】:

既然这个问题没有答案,我就直接用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

【讨论】:

  • 谢谢,我想这个问题已经正式结束了,因为我从 Olaf 的 cmets 那里得到了答案
【解决方案2】:

只需用 C 语言编写代码,然后让编译器将其转换为 ARM 程序集。然后检查生成的代码。

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多