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位阵列(或短阵列)。