首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

CM3 中一些前卫的指令

CM3 中一些前卫的指令

这里列出几条从v6 和v7 开始才支持的最新指令。
4.4.1   MRS和 MSR
虽然名字与以前的ARM 相同,但功能变了。这两条指令是访问特殊功能寄存器的“专用通道”——
当然必须在特权级下使用,除了APSR 可以在用户级下访问外。 指令语法如下:
MRS    <Rn>,  <SReg>    ;加载特殊功能寄存器的值到Rn MSR    <Sreg>,<Rn>      ;存储Rn的值到特殊功能寄存器 SReg 可以是下表中的一个:
表4.31     MRS/MSR 可以使用的特殊功能寄存器

符号          功能

IPSR                       当前服务中断号寄存器
EPSR                      执行状态寄存器(读回来的总是0)。它里面含T 位,在CM3 中T 位必须是1,所以在更改EPSR


时要格外小心——译注。 APSR                      上条指令结果的标志 IEPSR                     IPSR+EPSR
IAPSR                     IPSR+APSR

EAPSR                    EPSR+APSR
PSR                        xPSR = APSR+EPSR+IPSR

MSP                       主堆栈指针 PSP                        进入堆栈指针 PRIMASK              常规异常屏蔽寄存器

BASEPRI                常规异常的优先级阈值寄存器

BASEPRI_MAX     等同BASEPRI,但是施加了写的限制:新的优先级比较比旧的高(更小的数) FAULTMASK         fault 屏蔽寄存器(除了包含PRIMASK 的全部功能外,还能除能硬fault) CONTROL              控制寄存器(堆栈选择,特权等级设置)

下面给出一个指定PSP 进行更新的例子:
LDR
R0,
=0x20008000
MSR
PSP,
R0
BX
LR
;如果是从异常返回到线程状态,则使用新的 PSP的值作为栈顶指针
4.4.2   IF-THEN
IF-THEN(IT)指令围起一个块,里面最多有 4 条指令,它里面的指令可以条件执行。
IT 指令已经带了一个“T”,因此还可以最多再带 3 个“T”或者“E”。并且对  T 和 E 的顺序没有 要求。其中 T 对应条件成立时执行的语句,E 对应条件不成立时执行的语句。在 If-Then 块中的指令 必须加上条件后缀,且 T 对应的指令必须使用和 IT 指令中相同的条件,E 对应的指令必须使用和 IT 指令中相反的条件。
IT 的使用形式总结如下:
IT            <cond>    ;围起1条指令的IF-THEN块 IT<x>         <cond>    ;围起2条指令的IF-THEN块 IT<x><y>      <cond>    ;围起3条指令的IF-THEN块 IT<x><y><z>   <cond>    ;围起4条指令的IF-THEN块
其中<x>, <y>, <z>的取值可以是“T”或者“E”。而<cond>则是在表 4.26 中列出的条件(AL 除外 )。
[译注 17]:IT  指令使能了指令的条件执行方式,并且使 CM3  不再预取不满足条件的
指令。又因为它在使用时取代了条件转移指令,还避免了在执行流转移时,对流水线的 清洗和重新指令预取的开销,所以能优化C 结构中的微小if 块和很多“?:”运算符
继承事业,薪火相传
返回列表