Pointers 创建指向数组中位置的指针

Pointers 创建指向数组中位置的指针,pointers,assembly,memory,Pointers,Assembly,Memory,我是一个初学者与汇编,所以请让我知道,如果我忘记了重要的信息。我的作业是关于使用内存的,我对从内存位置获取地址和从所述位置获取值有点困惑 具体来说,我有一个整数数组。我想要一个指向第一项的寄存器,一个指向最后一项的寄存器。我得到了寄存器0中第一个项目的指针r0,项目数为r1 @ Given values: @ r0 - pointer to first item in array @ r1 - number of items in array mov r3, r1 @ r3

我是一个初学者与汇编,所以请让我知道,如果我忘记了重要的信息。我的作业是关于使用内存的,我对从内存位置获取地址和从所述位置获取值有点困惑

具体来说,我有一个整数数组。我想要一个指向第一项的寄存器,一个指向最后一项的寄存器。我得到了寄存器0中第一个项目的指针r0,项目数为r1

@ Given values:
@ r0 - pointer to first item in array
@ r1 - number of items in array

mov r3, r1          @ r3 = (r1)
lsl r3, #2          @ r3 = (r1*4)
sub r3, r3, #4      @ r3 = (r1*4)-4
add r3, r0, r3      @ r3 = r0+(r1*4-4)

ldr r2, [r3]        @ r2 points to last item
ldr r1, [r0]        @ r1 points to first item 

考虑到这两个,我可以用(r0+r1*4-4)得到最后一项,对吗?使用该值,我尝试将最后一项的地址移动到下面的r2中。这是获取和存储地址的正确方法,还是我遗漏了什么?

您的前四条语句将数组中最后一项的地址正确地放入了r3


最后两条语句将最后一项的值加载到r2中,将第一项的值加载到r1中。

您的想法是正确的,但您可以将代码简化为
mov r3,#-4;加上r3,r3,r1 lsl#2
@fuz,你似乎在假设一个特定的指令集?他没有指定,而且他使用的指令非常通用。@prl它看起来确实很像ARM,但OP应该真正指定一个指令集。我已经否决了这个问题,直到OP编辑它以指定一个指令集。