野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25324|回复: 5

请问一下STM32的R0,R1,R2,R3这些寄存器是做什么用的?

[复制链接]
发表于 2014-1-29 20:57:21 | 显示全部楼层 |阅读模式
    在STM32的启动文件和数据手册这些地方都出现了这些寄存器。好奇就百度一下。总结如下:
R0,R1,R2,R3这些寄存器都是ARM内核里面的寄存器,一般ARM的CPU都有R0到R37等寄存器。而像GPIO这些寄存器是外设的寄存器。
请高手指正我理解的是否正确??之前我还问了群里的问说有没必要学汇编,后来自己也粗略的看了一下,请问这些R0-R37跟8086里面的AX,BX这些寄存器是否一样不只是拿来存数据,是有第二功能的?比如累加器,基址寄存器,谢谢!
回复

使用道具 举报

发表于 2014-1-29 21:11:06 | 显示全部楼层
R0,R1,R2,R3这些寄存器 ,一般用在传递参数和局部变量用的,原因是 读写速度快。学过微机原理、或者汇编,就知道 两个立即数直接不能直接比较大小,都需要先把其中一个加载到寄存器里。
回复 支持 1 反对 0

使用道具 举报

发表于 2014-1-29 21:12:17 | 显示全部楼层
GPIO这些寄存器,这些是外设寄存器,你可以把他们当作内存来考虑,因为他们跟 Rn 寄存器是不一样的,他们的读写速度也不如 Rn寄存器,也不能直接比较
回复 支持 反对

使用道具 举报

发表于 2014-1-29 21:13:14 | 显示全部楼层
r0-r3    用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。
            被调用函数在返回之前不必恢复 r0-r3。如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。
r4-r11 被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。
r12        是内部调用暂时寄存器 ip。它在过程链接胶合代码(例如,交互操作胶合代码)中用于此角色。
             在过程调用之间,可以将它用于任何用途。被调用函数在返回之前不必恢复 r12。
13        是栈指针 sp。它不能用于任何其它用途。sp 中存放的值在退出被调用函数时必须与进入时的值相同。
r14        是链接寄存器 lr。如果您保存了返回地址,则可以在调用之间将 r14 用于其它用途,程序返回时要恢复
r15        是程序计数器 PC。它不能用于任何其它用途。
     注意:在中断程序中,所有的寄存器都必须保护,编译器会自动保护R4~R11
回复 支持 1 反对 0

使用道具 举报

发表于 2014-1-29 21:15:06 | 显示全部楼层
汇编,确实没必要学,但也要粗略看懂。有的问题,C语言看上去完全没问题,就需要到汇编里看才找到原因的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-29 21:42:28 | 显示全部楼层
山外メ雲ジ 发表于 2014-1-29 21:15
汇编,确实没必要学,但也要粗略看懂。有的问题,C语言看上去完全没问题,就需要到汇编里看才找到原因的。

非常详细的解释,非常感谢。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-10 04:54 , Processed in 0.042064 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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