OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1701|回复: 2

寄存器赋值的疑惑

[复制链接]

9

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-6-21
在线时间
31 小时
发表于 2018-5-15 16:36:34 | 显示全部楼层 |阅读模式
10金钱
最近在看一个cortex中的任务压栈的过程,让我有一个不理解的地方在于,使用栈指针进行压栈的时候,使用下列的代码
      MSR R0 PSP
       STMDB R0!,{R0-R4}

首先将PSP的值读入至寄存器R0中,然后使用R0中的值为地址,并进行入栈操作,为何不直接使用PSP进行入栈操作呢?不理解

还有在对一些寄存器赋值的时候,往往都是现将值放入到寄存器R0中,然后再从R0中 赋值给目标寄存器,这是为什么呢?为什么不直接赋值到目标寄存器中,而是使用R0作为“中转站”

这样做的意义在什么地方或者说必要性是什么?跪求各位大佬!!!!!!





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-5-17 01:47:52 | 显示全部楼层
回复

使用道具 举报

37

主题

596

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1574
金钱
1574
注册时间
2017-7-17
在线时间
308 小时
发表于 2018-5-17 09:57:41 | 显示全部楼层
不要纠结于形式,你完全可以用PUSH和POP压栈多个寄存器,人家也说了The PUSH and POP instructions can be expressed in this form,就是说这个形式可以实现PUSH和POP的功能。就像人家用了for循环,你问为什么不用while一样。使用R0作为中转站的原因,是因为在汇编中,推荐使用前面几个通用寄存器来传递函数参数,当然你不这么做也可以。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 15:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表