关于DA寻址模式,我有两个问题。例如:
STMDA R0!, {R1-R7}根据ARM架构参考手册,起始地址为R0 - (7 * 4) + 4,即R0-24,end_address为R0。
所以:
R0
R1值存储到R0-24或R1 R1存储到R0-24,然后后续存储将向内存顶部增长(从R0-24到R0)?)。
发布于 2009-11-20 04:08:19
部分伪码如下所示:
地址= start_address表示i=0至15如果register_listi == 1那么内存地址,4= Ri address = address +4
STM的增长方式似乎与存储数据时的寻址方式无关。它总是将数据从低地址存储到更高的地址,寻址模式只决定基于R0的起始地址?
发布于 2009-11-17 15:16:03
当使用ARM多个存储和加载时,寄存器值总是按升序加载/存储在内存中。因此,当使用降序多个存储时,寄存器会向后写入内存。您的STMDA指令有效地分解为以下步骤:
从R0到R0(因为写回-- the !). ),
R0 - 24R7所以,回答你的问题:
R1的值将存储在R0 - 24中。(在这里,我指的是执行指令之前的R0值,而不是之后的值。您使用的是写回( ! ),所以在指令完成后,R0将从R0中减去28被存储在R0 - 24,但如上所述,R1是最后一个将其值存储在内存中的寄存器。R7首先存储,随后的存储在内存中向下增长。我不得不承认,我不知道有任何文件支持这个答案。而且,我上次做任何ARM编码已经有一段时间了。但是,我确实记得想知道ARM是如何在一个递减的多个存储中注册的。我写了一个简短的程序来找出答案。
发布于 2009-11-20 02:45:53
搜索arm架构参考手册.
所形成的第一个地址是基寄存器的值减去其中指定的寄存器数的4倍,加上4。后续地址是通过将前一个地址增加四个而形成的。中指定的每个寄存器生成一个地址。
https://stackoverflow.com/questions/1748319
复制相似问题