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

关于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 位指令。
 

你可能感兴趣的:(ARM,soc学习)