您的位置:首页 > 其它

ARM汇编里面的关于cpsid.n中的.n解释

2015-10-03 15:42 387 查看
关于cspid.n i的.n的意思

我查了下ARMV7的资料

该指令主要从属于

1.CPS指令(ARMv6-M, ARMv7-M都支持)

主要是:

CPS

汇编语法:

CPS

这里面有一个

取值:

IE 中断使能

ID 关中断

该处是指标准汇编语法选择 (经测试只有在ARMv7中才支持该位,ARMv6不支持)

.N narrow代表短指令,特指采用16位进行解码.

.W 代表宽指令,特指采用32位进行解码

I 代表interrupt 代表中断,即禁用中断。将执行的优先级设置为0以屏蔽其他低优先级的中断。

F 代表Faultmask 代表屏蔽异常中断。将执行的优先级设置为-1(和HardFault一样),除了NMI其他都不能中断。

CPSIE I PRIMASK写0

CPSID I PRIMASK写1

CPSIE F FAULTMASK写0

CPSIE F FAULTMASK写1

在M3权威指南中也找到了相关资料:

在Thumb‐2 指令集中,有些操作既可以由16 位指令完成,也可以由32 位指令完成。

例如,R0=R0+1 这样的操作,16 位的与32 位的指令都提供了助记符为“ADD”的指令。在

UAL 下,你可以让汇编器决定用哪个,也可以手工指定是用16 位的还是32 位的:

ADDS R0, #1 ;汇编器将为了节省空间而使用16 位指令

ADDS.N R0, #1 ;指定使用16 位指令(N=Narrow)

ADDS.W R0, #1 ;指定使用32 位指令(W=Wide)

.W(Wide)后缀指定32 位指令。如果没有给出后缀,汇编器会先试着用16 位指令以缩小

代码体积,如果不行再使用32 位指令。因此,使用“.N”其实是多此一举,不过汇编器可

能仍然允许这样的语法。

再次重申,这是ARM 公司汇编器的语法,其它汇编器的可能略有区别,但如果没有给

出后缀,汇编器就总是会尽量选择更短的指令。

其实在绝大多数情况下,程序是用C 写的,C 编译器也会尽可能地使用短指令。然而,

当立即数超出一定范围时,或者32 位指令能更好地适合某个操作,将使用32 位指令。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: