求解这道嵌入式题

假设R4的内容为0x6000,寄存器R5、R6、R7内容分别为0x01、0x02与0x03,存储器内容为空。执行下述指令后,说明PC如何变化?存储器及寄存器R4、R5、R... 假设R4的内容为0x6000,寄存器R5、R6、R7内容分别为0x01、0x02与0x03,存储器内容为空。执行下述指令后,说明PC如何变化?存储器及寄存器R4、R5、R6、R7的内容如何变化?

STMIB R4!,{R5,R6,R7}

LDMIA R4!,{R5,R6,R7}
展开
 我来答
xumin10419
推荐于2018-03-20 · TA获得超过271个赞
知道答主
回答量:136
采纳率:100%
帮助的人:88.7万
展开全部
STMIB R4!,{R5,R6,R7}
STM为批量存储数据指令,后面的IB: 每次传送前地址加4;所以R5,R6,R7中的内容是不改变的。现在来看!号,这个表示是否更新寄存器R4。所以每传送一次之前R4就+4;PC是不变的,不要将PC与SP的功能混淆。
LDMIA R4!,{R5,R6,R7}

有了上面的理解,这个就简单了。原理是一样的,LDMIA R4!,IA表示每次传送后地址加4;由于从地址0x6000开始地址里面存储的数据没告诉,所以R5,R6,R7的值是不确定的。R4没次传送后+4;PC的值现在不好确定,如果这句汇编是与上一句的下一句,怎+4;如果只是单独理解,也不变。

注意,以上都是针对ARM状态来说的,如果是thumb状态,改为+2!
可以调试一下看看,是不是这样。
1611773402
2012-12-27 · TA获得超过212个赞
知道答主
回答量:114
采纳率:100%
帮助的人:25.2万
展开全部
同一天
同一人同意
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
作业qsb
2020-11-26
知道答主
回答量:12
采纳率:0%
帮助的人:7519
展开全部
今天也做到这个题了。。
首先要注意的是题目不是平常的入栈和出栈,因为地址一直走向增大的方向,如果换成IB和DA就是先增加后减少。
其次语句递增堆栈入栈时Rn由小到大存入,出栈时由大到小弹出,不然解释不清楚课本P41上面的递减栈操作。。
从而递增堆栈的STMIB入栈(与STMDA相同)寄存器从小到大存入
和递减堆栈的LDMIA出栈(与LDMFD相同)仍然是按照从小到大顺序取出
所以题目第二语句的出栈应该从R5开始,沿着0x600c一路取值,很显然除了R5,这些值都不确定,只能用[]取地址下的内容。
PC就加2*4好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式