ARM DA(Decrement After)寻址模式的首地址是哪个?
-
20-09-2019 - |
题
我有两个关于DA寻址模式的问题。例如:
STMDA R0!, {R1-R7}
起始地址将是 R0 - (7 * 4) + 4
, , 那是, R0-24
, ,根据 ARM架构参考手册 和 end_address 将是 R0
.
所以:
- 请问价值
R1
将被存储到R0-24
或者R0
? - 如果
R1
被存储到R0-24
, ,那么后续存储将向内存顶部增长(从R0-24
到R0
)?
解决方案 3
部分伪代码如下所示:
address = start_address for i = 0至15如果register_list [i] == 1,则存储[地址,4] = ri地址=地址=地址 + 4
看来STM的增长方式和存储数据时的寻址方式无关?它总是将数据从较低地址存储到更高,地址模式仅根据R0决定起始地址?
其他提示
当使用 ARM 多重存储和加载时,寄存器值始终按升序加载/存储在内存中。因此,当使用降序多重存储时,寄存器会向后写入内存。你的 STMDA
指令有效地分为以下步骤:
- 店铺
R7
在R0
- 店铺
R6
在R0 - 4
- 店铺
R5
在R0 - 8
- 店铺
R4
在R0 - 12
- 店铺
R3
在R0 - 16
- 店铺
R2
在R0 - 20
- 店铺
R1
在R0 - 24
- 减去 28
R0
(因为 回写 - 这!
).
所以,回答你的问题:
的价值
R1
将被存储在R0 - 24
. 。(这里,我的意思是R0
在执行指令之前,而不是之后。您正在使用写回 -!
- 所以在指导之后,R0
将会从中减去 28。)R1
存储在R0 - 24
, ,但正如上面所解释的,R1
是最后一个将其值存储在内存中的寄存器。R7
首先存储,随后的存储在内存中向下增长。
我必须承认我不知道任何支持这个答案的文档。另外,自从我上次进行 ARM 编码以来已经有一段时间了。然而,我确实记得想知道 ARM 如何以降序多重存储方式存储寄存器。我通过编写一个简短的程序来找出答案。
搜索arm arm ARM 架构参考手册...
形成的第一个地址是 ,并且是基址寄存器的值减去 中指定的寄存器数量的四倍,再加上 4。后续地址是通过将前一个地址增加 4 来形成的。为 中指定的每个寄存器生成一个地址。
不隶属于 StackOverflow