Cortex-M3 CPU指令集

[复制链接]
 楼主| zya888 发表于 2016-3-24 13:28 | 显示全部楼层 |阅读模式
Cortex-M3的指令集包括:
CMSIS函数;
存储器访问指令;
通用的数据数据指令;
乘法和除法指令;
饱和指令;
比特位域操作指令;
分支和控制指令;
杂项指令;
 楼主| zya888 发表于 2016-3-24 13:35 | 显示全部楼层
后缀                 标志                 含义
EQ                 Z=1                 等于
NE                 Z=0                 不等于
CS或者HS         C=1                 高或者相同,无符号
CC或者LO         C=0                 低,无符号
MI                 N=1                 负
PL                 N=0                 正或零
VS                 V=1                 溢出
VC                 V=0                 没有溢出
HI                 C=1和Z=0         高,无符号
LS                 C=0或Z=1         低或者相同,无符号
GE                 N=V                 大于或者等于,有符号
LT                 N!=V                 小于,有符号
GT                 Z=0和N=V         大于,有符号
LE                 Z=1和N!=V         小于等于,有符号
AL                 能有任何值         总是。当没有指定后缀时,这是默认的
heping517 发表于 2016-3-24 13:36 | 显示全部楼层
指令宽度选择
        Cortex-M3指令集中的很多指令可以产生16位编码或者32位编码,这取决于指定的操作数和目标寄存器。通过使用带有宽度后缀,强迫一个指定的具体的指令大小。.W后缀强迫一个32位指令编码。.N后缀强迫一个16位指令编码。
heping517 发表于 2016-3-24 13:48 | 显示全部楼层
如果给出了宽度后缀,而汇编器不能产生一个所要求宽度的指令编码,则产生一个错误。
         在一些情况下,需要指定.W后缀。比如,分支指令中,如果操作数是一个指令的标号或者一个文字的数据。这是由于汇编器不能自动地产生正确大小的编码。
 楼主| zya888 发表于 2016-3-24 14:08 | 显示全部楼层
        ISO/IEC C代码不能直接访问一些Cortex-M3指令。这部分给出使用CMSIS和C编译器内提供的固有函数,它能产生这些指令。如果C编译器不支持合理的固有函数,可以使用内联汇编器访问一些指令。下表 给出了Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard,CMSIS)函数产生一些Cortex-M3指令
dianz 发表于 2016-3-24 14:10 | 显示全部楼层
指令                         CMSIC函数
CPSIE I         void __enable_irq(void)
CPSID I         void __disable_irq(void)
CPSIE F         void __enable_fault_irq(void)
CPSID F         void __disable_fault_irq(void)
ISB                 void __ISB(void)
DSB                 void __DSB(void)
DMB                 void __DMB(void)
REV                 uint32_t __REV(uint32_t int value)
REV16         uint32_t __REV16(uint32_t int value)
REVSH         uint32_t __REVSH(uint32_t int value)
RBIT                 uint32_t __RBIT(uint32_t int value)
SEV                 void __SEV(void)
WFE                 void __WFE(void)
WFI                 void __WFI(void)
heping517 发表于 2016-3-24 14:11 | 显示全部楼层
对于以上的指令,需要注意下面的一些限制:Rd不能是PC和SP。
heping517 发表于 2016-3-24 14:30 | 显示全部楼层
指令系统

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
dianz 发表于 2016-3-24 14:31 | 显示全部楼层
当Rt是SP或者PC时,只能使用字类型,即LDR指令后没有{type}后缀。当Rt是PC时,必须满足:
加载值的bit[0]位,必须是1,用于正确的执行;
如果指令是有条件的,它必须是IT块的最后一条指令。
dianz 发表于 2016-3-24 14:41 | 显示全部楼层
对于LDRD指令,Rt和Rt2是不同的。
对于STR指令,当Rt是SP时,为字操作;Rt和Rn不能是PC。
在预索引和索引后模式下,对于LDR和STR指令,Rt2和Rt2是不同的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

239

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

32

主题

239

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部