Assembly 理解ARM中的str

Assembly 理解ARM中的str,assembly,arm,Assembly,Arm,我有以下汇编代码: alpha: .space 64 @reserves 64 bytes i: int 0 .text .align2 .globalmain .func main main: ldr r3,=i @r3 is address of i mov r2,#0 @r2 is 0 str r2,[r3] @r2 is stored in r3 L1: ldr r3,=i

我有以下汇编代码:

alpha: .space 64    @reserves 64 bytes
i: int 0
   .text
   .align2
   .globalmain
   .func main
main:
      ldr r3,=i      @r3 is address of i
      mov r2,#0      @r2 is 0
      str r2,[r3]    @r2 is stored in r3
L1:
    ldr r3,=i             @r2 is address of i
    ldr r2,[r3]           @r2 is now address of i 
    cmp r2,#16            
    bge exit              @if r2 > 16, then exit (but it is not)
    ldr r3,=i             @r3 is address of i
    ldr r2,[r3]           @r2 is address of i
    add r1,r2,#0x200      @r1 is r2 + 0x200
    ldr r3,=alpha         @r3 is address of first element in array alpha (I think)
    str r1,[r3,r2,asl#2]
    ...
我知道很多,但我只有一部分有问题。我评论了我知道的部分,或者至少我认为我知道

我遇到的问题是str r1、[r3、r2、asl#2]。我知道asl#2是左移,但我只知道这些。r1存储在哪里,在r3中?
str
命令的结果是什么?有人能给我解释一下吗

str r1,[r3,r2,asl#2]

r2中的值是算术左移的(立即值)2,并添加到r3的内容中,以获得r1将存储的内存地址。

是否?可能是重复的,因为您问了两次完全相同的问题(但另一个问题更清楚,答案更好)。确实是这样。我完全忘记了this@artlessnoise我的印象是,我们更倾向于对被问得最好的问题保持开放:或者在“C”中,它类似于
intr3[];r3[r2]=r1
--
asl#2
适用于32位大小的阵列,而
asl#1
适用于16位阵列(或短阵列)。