gpt4 book ai didi

arrays - 如何在ARM汇编中正确创建数组?

转载 作者:行者123 更新时间:2023-12-04 15:44:56 24 4
gpt4 key购买 nike

我目前正在为一门类(class)学习ARM汇编,并且遇到了需要使用“数组”的问题。我知道ARM中没有数组这样的东西,因此我必须分配空间并将其视为数组。我有两个问题。

  • 我是否已将新值正确添加到数组中,还是仅覆盖了先前的值?如果我覆盖这些值,我该如何添加新值?
  • 如何遍历数组的不同值?我知道我必须使用loop:,但不知道如何使用它来访问不同的“索引”。

  • 到目前为止,这是我从在线资源中搜集到的ARM文档的内容。
            .equ SWI_Exit,  0x11

    .text
    .global _start

    _start: .global _start
    .global main

    b main

    main:
    ldr R0, =MyArray
    mov R1, #42
    str R1, [R0], #4
    mov R1, #43
    str R1, [R0], #4
    swi SWI_Exit

    MyArray: .skip 20 * 4
    .end

    附带说明一下,我正在按照教授的要求使用 ARMSim#,因此ARM Sim#不会识别GNU工具识别的某些命令,或者至少我认为是这种情况。如果我错了,请纠正我。

    最佳答案

  • 您只是覆盖元素。在此级别上,存在“诸如数组之类的东西”,但是只有固定大小的预分配数组。 .skip正在分配固定大小的数组。*通常使用堆栈或堆,使用更复杂的动态内存分配代码来实现可变大小,可增长的数组。
  • 如果您有一个类似于loop:的标签(实际名称是任意的),则可以使用b loop分支(返回)到它。 (可能是,您希望有条件地进行分支,以使程序不会永远循环。)您可以通过更改R0来访问循环中的不同元素,而您已经在做

  • 另外, b main实际上没有任何作用,因为它正在分支到下一条指令。如果将其删除,该代码将执行相同的操作。

    [*]或者,您可以说数组是 MyArrayR0之间的唯一元素(不包括指向 R0的内存),通过更改 R0您可以扩展数组。但是最大大小仍然由 .skip指令确定。

    关于arrays - 如何在ARM汇编中正确创建数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19331041/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com