LM3S8962 ASM问题求助

2019-03-24 16:14发布

LM3S8962,
ASM问题求助
为什么以下代码可以正常运行:
OSIntCtxSw
PUSH {R4, R5}
LDR R4, =NVIC_INT_CTRL ; trigger the PendSV exception
LDR R5, =NVIC_PENDSVSET
STR R5, [R4]
POP {R4, R5}
BX LR
NOP


但如果改为以下就出错:
OSIntCtxSw
PUSH {LR}
PUSH {R4, R5}
LDR R4, =NVIC_INT_CTRL ; trigger the PendSV exception
LDR R5, =NVIC_PENDSVSET
STR R5, [R4]
POP {R4, R5}
POP {LR} // 只要对LR 进行写操作就会出错
BX LR
NOP

只要对LR 进行写操作就会出错,请问是什么原因? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
academic
1楼-- · 2019-03-24 20:05
< 不太清楚哦,看看权威指南
常见泽1
2楼-- · 2019-03-25 01:49
 精彩回答 2  元偷偷看……
shilaike
3楼-- · 2019-03-25 03:41
看了一下,貌似LZ没有对LR进行写操作,只是压站和出站的操作。
的CM3看,链接寄存器会自动入栈,自动出站。如果要操作的话,LZ应该将CPU工作模式改了。。。
    不知道上面的理解对不对。。。。。查查LR人使用手册。。。。
qqatscau
4楼-- · 2019-03-25 05:44
POP   {LR}   就是对LR进行写操作。
请问应该怎样改CPU的工作模式?
shilaike
5楼-- · 2019-03-25 10:55
 精彩回答 2  元偷偷看……
qqatscau
6楼-- · 2019-03-25 13:33
POP 之前我已PUSH一次,不存在“就是将下一个栈地址中的数据放到了LR中”的问题。

在该例子中,PUSH/POP 从R0到R12中的任意一个或若干个寄存器都没有出错,但只要POP列表中有LR就会出错。实在想不明白。

一周热门 更多>

相关问题

    相关文章