9

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

  1. 我是正确地将新值添加到数组中还是只是覆盖了以前的值?如果我要覆盖这些值,我该如何添加新值?
  2. 如何循环遍历数组的不同值?我知道我必须使用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#,因此 GNU 工具识别的一些命令不会被 ARMSim# 识别,或者至少我相信是这样。如果我错了,请纠正我。

4

1 回答 1

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

此外,b main它并没有真正起到任何作用,因为它正在分支到他的下一条指令。如果您删除它,该代码将执行相同的操作。

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

于 2013-10-12T08:36:13.147 回答