我目前正在学习一个类的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#,因此GNU工具识别的一些命令将不会被ARMSim#识别,或者至少我相信是这种情况。如果我错了,请纠正我。
答案 0 :(得分:2)
.skip
正在分配固定大小的数组。*可变大小,可增长的数组通常使用堆栈或堆来使用更复杂的动态内存分配代码来实现。loop:
之类的标签(实际名称是任意的),您可以使用b loop
分支(返回)它。 (可能你想要有条件地进行分支,这样程序就不会永远循环。)你可以通过改变你已经在做的R0
来访问循环中的不同元素同样b main
并没有真正用于任何目的,因为它正在分支到下一条指令。如果删除它,代码将执行相同的操作。
[*]或者,您可以说您的数组是MyArray
和R0
之间的唯一元素(不包括指向的内存R0
),其中,通过更改{ {1}}您正在扩展数组。但最大大小仍然由R0
指令确定。