ARM cortex M3寄存器及指令集
Posted -Robot-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM cortex M3寄存器及指令集相关的知识,希望对你有一定的参考价值。
1、cortex M3拥有通用寄存器R0-R15及一些特殊寄存器:
R0‐R7 也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32 位,复位后
的初始值是不可预料的。
R8‐R12 也被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们, 32
位的指令则不受限制。它们也是 32 位字长,且复位后的初始值是不可预料的 。
R13 是堆栈指针。在 CM3 处理器内核中共有两个堆栈指针,于是也就支持两个堆栈。
当引用 R13(或写作 SP)时,你引用到的是当前正在使用的那一个,另一个必须用特殊的指
令来访问(MRS,MSR 指令)。这两个堆栈指针分别是:
1)、主堆栈指针(MSP),或写作 SP_main。这是缺省的堆栈指针,它由 OS 内核、异常服务
例程以及所有需要特权访问的应用程序代码来使用。
2)、进程堆栈指针(PSP),或写作 SP_process。用于常规的应用程序代码(不处于异常服
用例程中时)。
要注意的是,并不是每个应用都必须用齐两个堆栈指针。简单的应用程序只使用 MSP
就够了。堆栈指针用于访问堆栈,并且 PUSH 指令和 POP 指令默认使用 SP 。
R14:连接寄存器
当呼叫一个子程序时,由 R14 存储返回地址
不像大多数其它处理器, ARM 为了减少访问内存的次数(访问内存的操作往往要 3 个以上指令周期,带 MMU
和 cache 的就更加不确定了),把返回地址直接存储在寄存器中。这样足以使很多只有 1 级子程序调用的代码无需访
问内存(堆栈内存),从而提高了子程序调用的效率。如果多于 1 级,则需要把前一级的 R14 值压到堆栈里。在 ARM
上编程时,应尽量只使用寄存器保存中间结果,迫不得以时才访问内存。在 RISC 处理器中,为了强调访内操作越过
了处理器的界线,并且带来了对性能的不利影响,给它取了一个专业的术语:溅出。
R15:程序计数寄存器
指向当前的程序地址。如果修改它的值,就能改变程序的执行流(很多高级技巧就在这里面—
—译注)
特殊功能寄存器:
2017-06-18 14:02:38
以上是关于ARM cortex M3寄存器及指令集的主要内容,如果未能解决你的问题,请参考以下文章