首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM DA(减缩后)寻址模式的第一个地址是哪个?

ARM DA(减缩后)寻址模式的第一个地址是哪个?
EN

Stack Overflow用户
提问于 2009-11-17 11:46:35
回答 3查看 543关注 0票数 1

关于DA寻址模式,我有两个问题。例如:

代码语言:javascript
复制
STMDA R0!, {R1-R7}

根据ARM架构参考手册,起始地址为R0 - (7 * 4) + 4,即R0-24,end_address为R0

所以:

R0

  • If

  • R1值存储到R0-24R1 R1存储到R0-24,然后后续存储将向内存顶部增长(从R0-24R0)?

)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-20 04:08:19

部分伪码如下所示:

地址= start_address表示i=0至15如果register_listi == 1那么内存地址,4= Ri address = address +4

STM的增长方式似乎与存储数据时的寻址方式无关。它总是将数据从低地址存储到更高的地址,寻址模式只决定基于R0的起始地址?

票数 0
EN

Stack Overflow用户

发布于 2009-11-17 15:16:03

当使用ARM多个存储和加载时,寄存器值总是按升序加载/存储在内存中。因此,当使用降序多个存储时,寄存器会向后写入内存。您的STMDA指令有效地分解为以下步骤:

R0R0(因为写回-- the !). ),

  • R0 - 24
  • subtract 28中存储R7

所以,回答你的问题:

  1. R1的值将存储在R0 - 24中。(在这里,我指的是执行指令之前的R0值,而不是之后的值。您使用的是写回( ! ),所以在指令完成后,R0将从R0中减去28被存储在R0 - 24,但如上所述,R1是最后一个将其值存储在内存中的寄存器。R7首先存储,随后的存储在内存中向下增长。

我不得不承认,我不知道有任何文件支持这个答案。而且,我上次做任何ARM编码已经有一段时间了。但是,我确实记得想知道ARM是如何在一个递减的多个存储中注册的。我写了一个简短的程序来找出答案。

票数 4
EN

Stack Overflow用户

发布于 2009-11-20 02:45:53

搜索arm架构参考手册.

所形成的第一个地址是基寄存器的值减去其中指定的寄存器数的4倍,加上4。后续地址是通过将前一个地址增加四个而形成的。中指定的每个寄存器生成一个地址。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1748319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档