求解这道嵌入式题
假设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} 展开
STMIB R4!,{R5,R6,R7}
LDMIA R4!,{R5,R6,R7} 展开
3个回答
展开全部
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!
可以调试一下看看,是不是这样。
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!
可以调试一下看看,是不是这样。
展开全部
同一天
同一人同意
同一人同意
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
今天也做到这个题了。。
首先要注意的是题目不是平常的入栈和出栈,因为地址一直走向增大的方向,如果换成IB和DA就是先增加后减少。
其次语句递增堆栈入栈时Rn由小到大存入,出栈时由大到小弹出,不然解释不清楚课本P41上面的递减栈操作。。
从而递增堆栈的STMIB入栈(与STMDA相同)寄存器从小到大存入
和递减堆栈的LDMIA出栈(与LDMFD相同)仍然是按照从小到大顺序取出
所以题目第二语句的出栈应该从R5开始,沿着0x600c一路取值,很显然除了R5,这些值都不确定,只能用[]取地址下的内容。
PC就加2*4好了。
首先要注意的是题目不是平常的入栈和出栈,因为地址一直走向增大的方向,如果换成IB和DA就是先增加后减少。
其次语句递增堆栈入栈时Rn由小到大存入,出栈时由大到小弹出,不然解释不清楚课本P41上面的递减栈操作。。
从而递增堆栈的STMIB入栈(与STMDA相同)寄存器从小到大存入
和递减堆栈的LDMIA出栈(与LDMFD相同)仍然是按照从小到大顺序取出
所以题目第二语句的出栈应该从R5开始,沿着0x600c一路取值,很显然除了R5,这些值都不确定,只能用[]取地址下的内容。
PC就加2*4好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询